#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; } inline bool exists(const ItemData& item) const { return this->primary_identifier_index.count(item.primary_identifier()); } enum Flag : uint8_t { INCLUDE_PSO_COLOR_ESCAPES = 0x01, NAME_ONLY = 0x02, }; std::string describe_item(const ItemData& item, uint8_t flags = 0) 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; std::map> es_name_index; };