Skip to content

Commit

Permalink
Initialize priority in CraftDefinition constructors
Browse files Browse the repository at this point in the history
The priority is used by getCraftResult, which may be used before
initHash is called.
  • Loading branch information
p-ouellette authored and sfan5 committed Jul 27, 2019
1 parent b994a35 commit 395b1b3
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 62 deletions.
107 changes: 73 additions & 34 deletions src/craftdef.cpp
Expand Up @@ -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 << '"';*/
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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
Expand All @@ -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";
Expand Down Expand Up @@ -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
Expand All @@ -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,
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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
Expand All @@ -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";
Expand Down Expand Up @@ -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
Expand Down
49 changes: 21 additions & 28 deletions src/craftdef.h
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -305,7 +300,6 @@ class CraftDefinitionToolRepair: public CraftDefinition
virtual void initHash(IGameDef *gamedef)
{
hash_type = CRAFT_HASH_TYPE_COUNT;
priority = TOOLREPAIR;
}

virtual std::string dump() const;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 395b1b3

Please sign in to comment.