Initialize priority in CraftDefinition constructors
authorPaul Ouellette <oue.paul18@gmail.com>
Mon, 22 Jul 2019 05:15:50 +0000 (01:15 -0400)
committersfan5 <sfan5@live.de>
Sat, 27 Jul 2019 12:42:41 +0000 (14:42 +0200)
The priority is used by getCraftResult, which may be used before
initHash is called.

src/craftdef.cpp
src/craftdef.h

index 9482fce6a9a7f1953611828a1b1ed2a6dd00d987..fb82bb3961781aeb8c41c0f6fd84620f3db52a76 100644 (file)
@@ -37,6 +37,15 @@ inline bool isGroupRecipeStr(const std::string &rec_name)
        return str_starts_with(rec_name, std::string("group:"));
 }
 
+static bool hasGroupItem(const std::vector<std::string> &recipe)
+{
+       for (const auto &item : recipe) {
+               if (isGroupRecipeStr(item))
+                       return true;
+       }
+       return false;
+}
+
 inline u64 getHashForString(const std::string &recipe_str)
 {
        /*errorstream << "Hashing craft string  \"" << recipe_str << '"';*/
@@ -320,6 +329,19 @@ std::string CraftReplacements::dump() const
        CraftDefinitionShaped
 */
 
+CraftDefinitionShaped::CraftDefinitionShaped(
+               const std::string &output_,
+               unsigned int width_,
+               const std::vector<std::string> &recipe_,
+               const CraftReplacements &replacements_):
+       output(output_), width(width_), recipe(recipe_), replacements(replacements_)
+{
+       if (hasGroupItem(recipe))
+               priority = SHAPED_AND_GROUPS;
+       else
+               priority = SHAPED;
+}
+
 std::string CraftDefinitionShaped::getName() const
 {
        return "shaped";
@@ -425,20 +447,10 @@ void CraftDefinitionShaped::initHash(IGameDef *gamedef)
        hash_inited = true;
        recipe_names = craftGetItemNames(recipe, gamedef);
 
-       bool has_group = false;
-       for (const auto &recipe_name : recipe_names) {
-               if (isGroupRecipeStr(recipe_name)) {
-                       has_group = true;
-                       break;
-               }
-       }
-       if (has_group) {
+       if (hasGroupItem(recipe_names))
                hash_type = CRAFT_HASH_TYPE_COUNT;
-               priority = SHAPED_AND_GROUPS;
-       } else {
+       else
                hash_type = CRAFT_HASH_TYPE_ITEM_NAMES;
-               priority = SHAPED;
-       }
 }
 
 std::string CraftDefinitionShaped::dump() const
@@ -454,6 +466,18 @@ std::string CraftDefinitionShaped::dump() const
        CraftDefinitionShapeless
 */
 
+CraftDefinitionShapeless::CraftDefinitionShapeless(
+               const std::string &output_,
+               const std::vector<std::string> &recipe_,
+               const CraftReplacements &replacements_):
+       output(output_), recipe(recipe_), replacements(replacements_)
+{
+       if (hasGroupItem(recipe))
+               priority = SHAPELESS_AND_GROUPS;
+       else
+               priority = SHAPELESS;
+}
+
 std::string CraftDefinitionShapeless::getName() const
 {
        return "shapeless";
@@ -542,20 +566,10 @@ void CraftDefinitionShapeless::initHash(IGameDef *gamedef)
        recipe_names = craftGetItemNames(recipe, gamedef);
        std::sort(recipe_names.begin(), recipe_names.end());
 
-       bool has_group = false;
-       for (const auto &recipe_name : recipe_names) {
-               if (isGroupRecipeStr(recipe_name)) {
-                       has_group = true;
-                       break;
-               }
-       }
-       if (has_group) {
+       if (hasGroupItem(recipe_names))
                hash_type = CRAFT_HASH_TYPE_COUNT;
-               priority = SHAPELESS_AND_GROUPS;
-       } else {
+       else
                hash_type = CRAFT_HASH_TYPE_ITEM_NAMES;
-               priority = SHAPELESS;
-       }
 }
 
 std::string CraftDefinitionShapeless::dump() const
@@ -571,6 +585,12 @@ std::string CraftDefinitionShapeless::dump() const
        CraftDefinitionToolRepair
 */
 
+CraftDefinitionToolRepair::CraftDefinitionToolRepair(float additional_wear_):
+       additional_wear(additional_wear_)
+{
+       priority = TOOLREPAIR;
+}
+
 static ItemStack craftToolRepair(
                const ItemStack &item1,
                const ItemStack &item2,
@@ -665,6 +685,19 @@ std::string CraftDefinitionToolRepair::dump() const
        CraftDefinitionCooking
 */
 
+CraftDefinitionCooking::CraftDefinitionCooking(
+               const std::string &output_,
+               const std::string &recipe_,
+               float cooktime_,
+               const CraftReplacements &replacements_):
+       output(output_), recipe(recipe_), cooktime(cooktime_), replacements(replacements_)
+{
+       if (isGroupRecipeStr(recipe))
+               priority = SHAPELESS_AND_GROUPS;
+       else
+               priority = SHAPELESS;
+}
+
 std::string CraftDefinitionCooking::getName() const
 {
        return "cooking";
@@ -735,13 +768,10 @@ void CraftDefinitionCooking::initHash(IGameDef *gamedef)
        hash_inited = true;
        recipe_name = craftGetItemName(recipe, gamedef);
 
-       if (isGroupRecipeStr(recipe_name)) {
+       if (isGroupRecipeStr(recipe_name))
                hash_type = CRAFT_HASH_TYPE_COUNT;
-               priority = SHAPELESS_AND_GROUPS;
-       } else {
+       else
                hash_type = CRAFT_HASH_TYPE_ITEM_NAMES;
-               priority = SHAPELESS;
-       }
 }
 
 std::string CraftDefinitionCooking::dump() const
@@ -758,6 +788,18 @@ std::string CraftDefinitionCooking::dump() const
        CraftDefinitionFuel
 */
 
+CraftDefinitionFuel::CraftDefinitionFuel(
+               const std::string &recipe_,
+               float burntime_,
+               const CraftReplacements &replacements_):
+       recipe(recipe_), burntime(burntime_), replacements(replacements_)
+{
+       if (isGroupRecipeStr(recipe_name))
+               priority = SHAPELESS_AND_GROUPS;
+       else
+               priority = SHAPELESS;
+}
+
 std::string CraftDefinitionFuel::getName() const
 {
        return "fuel";
@@ -828,13 +870,10 @@ void CraftDefinitionFuel::initHash(IGameDef *gamedef)
        hash_inited = true;
        recipe_name = craftGetItemName(recipe, gamedef);
 
-       if (isGroupRecipeStr(recipe_name)) {
+       if (isGroupRecipeStr(recipe_name))
                hash_type = CRAFT_HASH_TYPE_COUNT;
-               priority = SHAPELESS_AND_GROUPS;
-       } else {
+       else
                hash_type = CRAFT_HASH_TYPE_ITEM_NAMES;
-               priority = SHAPELESS;
-       }
 }
 
 std::string CraftDefinitionFuel::dump() const
index d8ad2eb22ae9df22e539fb96e28caa49a47276a9..a385a5c88e09ee93e9cae9e471689e1a227257e8 100644 (file)
@@ -196,15 +196,12 @@ class CraftDefinitionShaped: public CraftDefinition
 {
 public:
        CraftDefinitionShaped() = delete;
-
        CraftDefinitionShaped(
-                       const std::string &output_,
-                       unsigned int width_,
-                       const std::vector<std::string> &recipe_,
-                       const CraftReplacements &replacements_):
-               output(output_), width(width_), recipe(recipe_),
-               replacements(replacements_)
-       {}
+               const std::string &output_,
+               unsigned int width_,
+               const std::vector<std::string> &recipe_,
+               const CraftReplacements &replacements_);
+
        virtual ~CraftDefinitionShaped() = default;
 
        virtual std::string getName() const;
@@ -245,11 +242,10 @@ class CraftDefinitionShapeless: public CraftDefinition
 public:
        CraftDefinitionShapeless() = delete;
        CraftDefinitionShapeless(
-                       const std::string &output_,
-                       const std::vector<std::string> &recipe_,
-                       const CraftReplacements &replacements_):
-               output(output_), recipe(recipe_), replacements(replacements_)
-       {}
+               const std::string &output_,
+               const std::vector<std::string> &recipe_,
+               const CraftReplacements &replacements_);
+
        virtual ~CraftDefinitionShapeless() = default;
 
        virtual std::string getName() const;
@@ -288,9 +284,8 @@ class CraftDefinitionToolRepair: public CraftDefinition
 {
 public:
        CraftDefinitionToolRepair() = delete;
-       CraftDefinitionToolRepair(float additional_wear_):
-               additional_wear(additional_wear_)
-       {}
+       CraftDefinitionToolRepair(float additional_wear_);
+
        virtual ~CraftDefinitionToolRepair() = default;
 
        virtual std::string getName() const;
@@ -305,7 +300,6 @@ public:
        virtual void initHash(IGameDef *gamedef)
        {
                hash_type = CRAFT_HASH_TYPE_COUNT;
-               priority = TOOLREPAIR;
        }
 
        virtual std::string dump() const;
@@ -328,12 +322,11 @@ class CraftDefinitionCooking: public CraftDefinition
 public:
        CraftDefinitionCooking() = delete;
        CraftDefinitionCooking(
-                       const std::string &output_,
-                       const std::string &recipe_,
-                       float cooktime_,
-                       const CraftReplacements &replacements_):
-               output(output_), recipe(recipe_), cooktime(cooktime_), replacements(replacements_)
-       {}
+               const std::string &output_,
+               const std::string &recipe_,
+               float cooktime_,
+               const CraftReplacements &replacements_);
+
        virtual ~CraftDefinitionCooking() = default;
 
        virtual std::string getName() const;
@@ -372,11 +365,11 @@ class CraftDefinitionFuel: public CraftDefinition
 {
 public:
        CraftDefinitionFuel() = delete;
-       CraftDefinitionFuel(const std::string &recipe_,
-                       float burntime_,
-                       const CraftReplacements &replacements_):
-               recipe(recipe_), burntime(burntime_), replacements(replacements_)
-       {}
+       CraftDefinitionFuel(
+               const std::string &recipe_,
+               float burntime_,
+               const CraftReplacements &replacements_);
+
        virtual ~CraftDefinitionFuel() = default;
 
        virtual std::string getName() const;