Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace int_id<json_flag> with string_id<json_flag> (housekeeping) #45277

Merged
merged 1 commit into from
Nov 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions data/json/statistics.json
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@
"id": "avatar_consumes_allergen_milk",
"type": "event_transformation",
"event_transformation": "avatar_consumes_item_flag",
"value_constraints": { "flag": { "equals": [ "flag_str_id", "ALLERGEN_MILK" ] } },
"value_constraints": { "flag": { "equals": [ "flag_id", "ALLERGEN_MILK" ] } },
"drop_fields": [ "flag" ]
},
{
Expand All @@ -492,7 +492,7 @@
"id": "avatar_consumes_allergen_eggs",
"type": "event_transformation",
"event_transformation": "avatar_consumes_item_flag",
"value_constraints": { "flag": { "equals": [ "flag_str_id", "ALLERGEN_EGG" ] } },
"value_constraints": { "flag": { "equals": [ "flag_id", "ALLERGEN_EGG" ] } },
"drop_fields": [ "flag" ]
},
{
Expand All @@ -506,7 +506,7 @@
"id": "avatar_consumes_allergen_meat",
"type": "event_transformation",
"event_transformation": "avatar_consumes_item_flag",
"value_constraints": { "flag": { "equals": [ "flag_str_id", "ALLERGEN_MEAT" ] } },
"value_constraints": { "flag": { "equals": [ "flag_id", "ALLERGEN_MEAT" ] } },
"drop_fields": [ "flag" ]
},
{
Expand Down
1 change: 0 additions & 1 deletion src/cata_variant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ std::string enum_to_string<cata_variant_type>( cata_variant_type type )
case cata_variant_type::furn_id: return "furn_id";
case cata_variant_type::furn_str_id: return "furn_str_id";
case cata_variant_type::flag_id: return "flag_id";
case cata_variant_type::flag_str_id: return "flag_str_id";
case cata_variant_type::int_: return "int";
case cata_variant_type::itype_id: return "itype_id";
case cata_variant_type::matype_id: return "matype_id";
Expand Down
8 changes: 2 additions & 6 deletions src/cata_variant.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ enum class cata_variant_type : int {
furn_id,
furn_str_id,
flag_id,
flag_str_id,
int_,
itype_id,
matype_id,
Expand Down Expand Up @@ -174,7 +173,7 @@ struct convert_enum {
};

// These are the specializations of convert for each value type.
static_assert( static_cast<int>( cata_variant_type::num_types ) == 34,
static_assert( static_cast<int>( cata_variant_type::num_types ) == 33,
"This assert is a reminder to add conversion support for any new types to the "
"below specializations" );

Expand Down Expand Up @@ -260,10 +259,7 @@ template<>
struct convert<cata_variant_type::furn_str_id> : convert_string_id<furn_str_id> {};

template<>
struct convert<cata_variant_type::flag_str_id> : convert_string_id<flag_str_id> {};

template<>
struct convert<cata_variant_type::flag_id> : convert_int_id<flag_id> {};
struct convert<cata_variant_type::flag_id> : convert_string_id<flag_id> {};

template<>
struct convert<cata_variant_type::int_> {
Expand Down
6 changes: 3 additions & 3 deletions src/editmap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1444,7 +1444,7 @@ void editmap::edit_itm()
imenu.addentry( imenu_tags, true, -1, pgettext( "item manipulation debug menu entry",
"tags: %s" ), debug_menu::iterable_to_string( it.get_flags(), " ",
[]( const flag_id & f ) {
return f.id().str();
return f.str();
} ) );
imenu.addentry( imenu_sep, false, 0, pgettext( "item manipulation debug menu entry",
"-[ light emission ]-" ) );
Expand Down Expand Up @@ -1476,7 +1476,7 @@ void editmap::edit_itm()
case imenu_tags:
strval = debug_menu::iterable_to_string( it.get_flags(), " ",
[]( const flag_id & f ) {
return f.id().str();
return f.str();
} );
break;
}
Expand Down Expand Up @@ -1517,7 +1517,7 @@ void editmap::edit_itm()
}
imenu.entries[imenu_tags].txt = debug_menu::iterable_to_string(
it.get_flags(), " ", []( const flag_id & f ) {
return f.id().str();
return f.str();
} );
break;
}
Expand Down
9 changes: 1 addition & 8 deletions src/effect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -401,14 +401,7 @@ bool effect_type::load_mod_data( const JsonObject &jo, const std::string &member

bool effect_type::has_flag( const flag_id &flag ) const
{
// initialize int_flags cache on first usage
if( flags.size() > int_flags.size() ) {
int_flags.clear();
for( const flag_str_id &f : flags ) {
int_flags.insert( f );
}
}
return int_flags.count( flag );
return flags.count( flag );
}

effect_rating effect_type::get_rating() const
Expand Down
1 change: 0 additions & 1 deletion src/effect.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ class effect_type
time_duration int_dur_factor = 0_turns;

std::set<flag_str_id> flags;
mutable cata::flat_set<flag_id> int_flags;

bool main_parts_only = false;

Expand Down
4 changes: 2 additions & 2 deletions src/event_field_transformations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ static std::vector<cata_variant> flags_of_itype( const cata_variant &v )
std::vector<cata_variant> result;
result.reserve( flags.size() );
for( const flag_id &s : flags ) {
result.push_back( cata_variant::make<cata_variant_type::flag_str_id>( s.id() ) );
result.push_back( cata_variant::make<cata_variant_type::flag_id>( s ) );
}
return result;
}
Expand Down Expand Up @@ -69,7 +69,7 @@ static std::vector<cata_variant> species_of_monster( const cata_variant &v )
const std::unordered_map<std::string, event_field_transformation> event_field_transformations = {
{
"flags_of_itype",
{flags_of_itype, cata_variant_type::flag_str_id, { cata_variant_type::itype_id}}
{flags_of_itype, cata_variant_type::flag_id, { cata_variant_type::itype_id}}
},
{
"flags_of_terrain",
Expand Down
45 changes: 2 additions & 43 deletions src/flag.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -321,66 +321,25 @@ const flag_str_id flag_NOT_FOOTWEAR( "NOT_FOOTWEAR" );
const flag_str_id flag_SOFT( "SOFT" );
const flag_str_id flag_HARD( "HARD" );


namespace
{
generic_factory<json_flag> json_flags_all( "json_flags" );
} // namespace

/** @relates int_id */
template<>
bool flag_id ::is_valid() const
{
return json_flags_all.is_valid( *this );
}

/** @relates int_id */
template<>
const json_flag &flag_id::obj() const
{
return json_flags_all.obj( *this );
}

/** @relates int_id */
template<>
const flag_str_id &flag_id::id() const
{
return json_flags_all.convert( *this );
}

/** @relates string_id */
template<>
bool flag_str_id ::is_valid() const
bool flag_id::is_valid() const
{
return json_flags_all.is_valid( *this );
}

/** @relates string_id */
template<>
const json_flag &flag_str_id::obj() const
const json_flag &flag_id::obj() const
{
return json_flags_all.obj( *this );
}

template<>
flag_id flag_str_id::id_or( const flag_id &fallback ) const
{
return json_flags_all.convert( *this, fallback, false );
}

/** @relates string_id */
template<>
flag_id flag_str_id::id() const
{
return json_flags_all.convert( *this, flag_id( -1 ) );
}

/** @relates int_id */
template<>
flag_id::int_id( const flag_str_id &id ) : _id( id.id() )
{
}

json_flag::operator bool() const
{
return id.is_valid();
Expand Down
6 changes: 3 additions & 3 deletions src/item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1635,7 +1635,7 @@ void item::debug_info( std::vector<iteminfo> &info, const iteminfo_query *parts,
info.push_back( iteminfo( "BASE", _( "burn: " ), "", iteminfo::lower_is_better,
burnt ) );
const std::string tags_listed = enumerate_as_string( item_tags, []( const flag_id & f ) {
return f.id().str();
return f.str();
}, enumeration_conjunction::none );

info.push_back( iteminfo( "BASE", string_format( _( "tags: %s" ), tags_listed ) ) );
Expand Down Expand Up @@ -5320,7 +5320,7 @@ bool item::has_flag( const flag_id &f ) const
{
bool ret = false;
if( !f.is_valid() ) {
debugmsg( "Attempted to check invalid flag_id %d", f.to_i() );
debugmsg( "Attempted to check invalid flag_id %s", f.str() );
return false;
}

Expand Down Expand Up @@ -5350,7 +5350,7 @@ item &item::set_flag( const flag_id &flag )
item_tags.insert( flag );
requires_tags_processing = true;
} else {
debugmsg( "Attempted to set invalid flag_id %d", flag.to_i() );
debugmsg( "Attempted to set invalid flag_id %s", flag.str() );
}
return *this;
}
Expand Down
47 changes: 18 additions & 29 deletions src/item_factory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ void Item_factory::finalize_pre( itype &obj )
{
// TODO: separate repairing from reinforcing/enhancement
if( obj.damage_max() == obj.damage_min() ) {
obj.item_tags_str_tmp.insert( flag_NO_REPAIR );
obj.item_tags.insert( flag_NO_REPAIR );
}

if( obj.has_flag( flag_STAB ) || obj.has_flag( flag_SPEAR ) ) {
Expand Down Expand Up @@ -209,15 +209,15 @@ void Item_factory::finalize_pre( itype &obj )
}

// set light_emission based on LIGHT_[X] flag
for( const auto &f : obj.item_tags_str_tmp ) {
for( const auto &f : obj.item_tags ) {
int ll;
if( sscanf( f.c_str(), "LIGHT_%i", &ll ) == 1 && ll > 0 ) {
obj.light_emission = ll;
}
}
// remove LIGHT_[X] flags
erase_if( obj.item_tags_str_tmp, []( const flag_str_id & f ) {
return f.str().find( "LIGHT_" ) == 0;
erase_if( obj.item_tags, []( const flag_str_id & f ) {
return string_starts_with( f.str(), "LIGHT_" );
} );

// for ammo not specifying loudness (or an explicit zero) derive value from other properties
Expand Down Expand Up @@ -394,8 +394,8 @@ void Item_factory::finalize_pre( itype &obj )
// TODO: Move to jsons?
if( obj.gun->skill_used == skill_id( "archery" ) ||
obj.gun->skill_used == skill_id( "throw" ) ) {
obj.item_tags_str_tmp.insert( flag_WATERPROOF_GUN );
obj.item_tags_str_tmp.insert( flag_NEVER_JAMS );
obj.item_tags.insert( flag_WATERPROOF_GUN );
obj.item_tags.insert( flag_NEVER_JAMS );
obj.gun->ammo_effects.insert( "NEVER_MISFIRES" );
}
}
Expand Down Expand Up @@ -495,25 +495,14 @@ void Item_factory::register_cached_uses( const itype &obj )

void Item_factory::finalize_post( itype &obj )
{
// copy string flags into int flags
if( !obj.item_tags.empty() ) {
debugmsg( "during finalization, itype '%s' has non-empty int_id flags set: [%s]", obj.id.str(),
debug_menu::iterable_to_string( obj.item_tags, ", ",
[]( const flag_id & f ) {
return f.id().str() + " (id: " + std::to_string( f.to_i() ) + ")";
} ) );
obj.item_tags.clear();
}
for( const flag_str_id &f : obj.item_tags_str_tmp ) {
erase_if( obj.item_tags, [&]( const flag_str_id & f ) {
if( !f.is_valid() ) {
debugmsg( "itype '%s' uses undefined flag '%s'. Please add corresponding 'json_flag' entry to json.",
obj.id.str(), f.str() );
} else {
obj.item_tags.insert( f );
return true;
}
}
// now `has_flags` will use `item_tags` for all lookups
obj.item_tags_str_tmp.clear();
return false;
} );

// handle complex firearms as a special case
if( obj.gun && !obj.has_flag( flag_PRIMITIVE_RANGED_WEAPON ) ) {
Expand Down Expand Up @@ -2501,7 +2490,7 @@ void Item_factory::set_allergy_flags( itype &item_template )
const auto &mats = item_template.materials;
for( const auto &pr : all_pairs ) {
if( std::find( mats.begin(), mats.end(), pr.first ) != mats.end() ) {
item_template.item_tags_str_tmp.insert( pr.second );
item_template.item_tags.insert( pr.second );
}
}
}
Expand All @@ -2523,29 +2512,29 @@ void hflesh_to_flesh( itype &item_template )
void Item_factory::npc_implied_flags( itype &item_template )
{
if( item_template.use_methods.count( "explosion" ) > 0 ) {
item_template.item_tags_str_tmp.insert( flag_DANGEROUS );
item_template.item_tags.insert( flag_DANGEROUS );
}

if( item_template.has_flag( flag_DANGEROUS ) > 0 ) {
item_template.item_tags_str_tmp.insert( flag_NPC_THROW_NOW );
item_template.item_tags.insert( flag_NPC_THROW_NOW );
}

if( item_template.has_flag( flag_BOMB ) > 0 ) {
item_template.item_tags_str_tmp.insert( flag_NPC_ACTIVATE );
item_template.item_tags.insert( flag_NPC_ACTIVATE );
}

if( item_template.has_flag( flag_NPC_THROW_NOW ) > 0 ) {
item_template.item_tags_str_tmp.insert( flag_NPC_THROWN );
item_template.item_tags.insert( flag_NPC_THROWN );
}

if( item_template.has_flag( flag_NPC_ACTIVATE ) > 0 ||
item_template.has_flag( flag_NPC_THROWN ) > 0 ) {
item_template.item_tags_str_tmp.insert( flag_NPC_ALT_ATTACK );
item_template.item_tags.insert( flag_NPC_ALT_ATTACK );
}

if( item_template.has_flag( flag_DANGEROUS ) > 0 ||
item_template.has_flag( flag_PSEUDO ) > 0 ) {
item_template.item_tags_str_tmp.insert( flag_TRADER_AVOID );
item_template.item_tags.insert( flag_TRADER_AVOID );
}
}

Expand Down Expand Up @@ -2908,7 +2897,7 @@ void Item_factory::load_basic_info( const JsonObject &jo, itype &def, const std:
def.explosion = load_explosion_data( je );
}

assign( jo, "flags", def.item_tags_str_tmp );
assign( jo, "flags", def.item_tags );
assign( jo, "faults", def.faults );

if( jo.has_member( "qualities" ) ) {
Expand Down
13 changes: 3 additions & 10 deletions src/item_pocket.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ void pocket_data::load( const JsonObject &jo )
optional( jo, was_loaded, "watertight", watertight, false );
optional( jo, was_loaded, "airtight", airtight, false );
optional( jo, was_loaded, "open_container", open_container, false );
optional( jo, was_loaded, "flag_restriction", flag_restrictions_str );
optional( jo, was_loaded, "flag_restriction", flag_restrictions );
optional( jo, was_loaded, "rigid", rigid, false );
optional( jo, was_loaded, "holster", holster );
optional( jo, was_loaded, "sealed_data", sealed_data );
Expand Down Expand Up @@ -178,19 +178,12 @@ bool pocket_data::operator==( const pocket_data &rhs ) const

const pocket_data::FlagsSetType &pocket_data::get_flag_restrictions() const
{
if( !flag_restrictions_str.empty() ) {
for( const auto &f : flag_restrictions_str ) {
flag_restrictions_int.insert( f );
}
flag_restrictions_str.clear();
}
return flag_restrictions_int;
return flag_restrictions;
}

void pocket_data::add_flag_restriction( const flag_str_id &flag )
{
flag_restrictions_str.insert( flag );
flag_restrictions_int.insert( flag );
flag_restrictions.insert( flag );
}

bool item_pocket::same_contents( const item_pocket &rhs ) const
Expand Down
7 changes: 2 additions & 5 deletions src/item_pocket.h
Original file line number Diff line number Diff line change
Expand Up @@ -396,11 +396,8 @@ class pocket_data
void load( const JsonObject &jo );
void deserialize( JsonIn &jsin );
private:
// `flag_restrictions_str` is filled on load and might be changed by `add_flag_restriction`
// when the accessor, `get_flag_restrictions`, is called, flags are moved from
// `flag_restrictions_str` into `flag_restrictions_int` and `flag_restrictions_str` is cleared.
mutable std::set<flag_str_id> flag_restrictions_str;
mutable FlagsSetType flag_restrictions_int;

FlagsSetType flag_restrictions;
};

template<>
Expand Down
Loading