Changes mapflag storage type to vector (#6624)

* Changes the mapflag storage type from an unordered_map to vector giving it a performance boost.
* This changes all lookups and modifications to O(1) rather than a possible O(log).
This commit is contained in:
Aleos
2022-02-18 08:10:57 -05:00
committed by GitHub
parent fc7ed9d397
commit 47e515888c
2 changed files with 8 additions and 8 deletions

View File

@@ -3655,7 +3655,7 @@ void map_flags_init(void){
union u_mapflag_args args = {};
mapdata->flag.clear();
mapdata->flag.reserve(MF_MAX); // Reserve the bucket size
mapdata->flag.resize(MF_MAX, 0); // Resize and define default values
mapdata->drop_list.clear();
args.flag_val = 100;
@@ -3692,7 +3692,7 @@ void map_data_copy(struct map_data *dst_map, struct map_data *src_map) {
memcpy(&dst_map->save, &src_map->save, sizeof(struct point));
memcpy(&dst_map->damage_adjust, &src_map->damage_adjust, sizeof(struct s_skill_damage));
dst_map->flag.insert(src_map->flag.begin(), src_map->flag.end());
dst_map->flag = src_map->flag;
dst_map->skill_damage.insert(src_map->skill_damage.begin(), src_map->skill_damage.end());
dst_map->skill_duration.insert(src_map->skill_duration.begin(), src_map->skill_duration.end());
@@ -4581,11 +4581,11 @@ int map_getmapflag_sub(int16 m, enum e_mapflag mapflag, union u_mapflag_args *ar
case MF_RESTRICTED:
return mapdata->zone;
case MF_NOLOOT:
return util::umap_get(mapdata->flag, static_cast<int16>(MF_NOMOBLOOT), 0) && util::umap_get(mapdata->flag, static_cast<int16>(MF_NOMVPLOOT), 0);
return mapdata->flag[MF_NOMOBLOOT] && mapdata->flag[MF_NOMVPLOOT];
case MF_NOPENALTY:
return util::umap_get(mapdata->flag, static_cast<int16>(MF_NOEXPPENALTY), 0) && util::umap_get(mapdata->flag, static_cast<int16>(MF_NOZENYPENALTY), 0);
return mapdata->flag[MF_NOEXPPENALTY] && mapdata->flag[MF_NOZENYPENALTY];
case MF_NOEXP:
return util::umap_get(mapdata->flag, static_cast<int16>(MF_NOBASEEXP), 0) && util::umap_get(mapdata->flag, static_cast<int16>(MF_NOJOBEXP), 0);
return mapdata->flag[MF_NOBASEEXP] && mapdata->flag[MF_NOJOBEXP];
case MF_SKILL_DAMAGE:
nullpo_retr(-1, args);
@@ -4598,10 +4598,10 @@ int map_getmapflag_sub(int16 m, enum e_mapflag mapflag, union u_mapflag_args *ar
case SKILLDMG_CASTER:
return mapdata->damage_adjust.caster;
default:
return util::umap_get(mapdata->flag, static_cast<int16>(mapflag), 0);
return mapdata->flag[mapflag];
}
default:
return util::umap_get(mapdata->flag, static_cast<int16>(mapflag), 0);
return mapdata->flag[mapflag];
}
}