#pragma once #include #include #include #include #include #include #include #include "ItemData.hh" #include "ItemParameterTable.hh" class ItemNameIndex { public: struct ItemMetadata { uint32_t primary_identifier; std::string name; }; ItemNameIndex( std::shared_ptr pmt, std::shared_ptr limits, const std::vector& name_coll); inline size_t entry_count() const { return this->primary_identifier_index.size(); } inline const std::unordered_map>& all_by_primary_identifier() const { return this->primary_identifier_index; } inline const std::map>& all_by_name() const { return this->name_index; } std::string describe_item(const ItemData& item, bool include_color_escapes = false) const; ItemData parse_item_description(const std::string& description) const; void print_table(FILE* stream) const; private: ItemData parse_item_description_phase(const std::string& description, bool skip_special) const; std::shared_ptr item_parameter_table; std::shared_ptr limits; std::unordered_map> primary_identifier_index; std::map> name_index; };