diff --git a/CInterface/Library/Item.cpp b/CInterface/Library/Item.cpp new file mode 100644 index 0000000..ccb9ca6 --- /dev/null +++ b/CInterface/Library/Item.cpp @@ -0,0 +1,28 @@ +#include "../../src/Library/Items/Item.hpp" +#define export extern "C" +using namespace CreatureLib::Library; +using ConstString = Arbutils::CaseInsensitiveConstString; + +export Item* CreatureLib_Item_Construct(const char* name, ItemCategory category, BattleItemCategory battleCategory, + int32_t price, const char* flags[], size_t flagsCount) { + std::unordered_set conversedFlags(flagsCount); + for (size_t i = 0; i < flagsCount; i++) { + conversedFlags.insert(ConstString::GetHash(flags[i])); + } + + return new Item(ConstString(name), category, battleCategory, price, conversedFlags); +}; + +export void CreatureLib_Item_Destruct(const Item* p) { delete p; } + +#define SIMPLE_GET_FUNC(type, name, returnType) \ + export returnType CreatureLib_##type##_##name(const type* p) { return p->name(); } + +export const char* CreatureLib_Item_GetName(const Item* p) { return p->GetName().c_str(); } +SIMPLE_GET_FUNC(Item, GetCategory, ItemCategory); +SIMPLE_GET_FUNC(Item, GetBattleCategory, BattleItemCategory); +SIMPLE_GET_FUNC(Item, GetPrice, int32_t); + +export bool CreatureLib_Item_HasFlag(const Item* p, const char* key) { return p->HasFlag(ConstString::GetHash(key)); } + +#undef SIMPLE_GET_FUNC \ No newline at end of file diff --git a/src/Library/Items/Item.cpp b/src/Library/Items/Item.cpp index b43d4ab..13e7936 100644 --- a/src/Library/Items/Item.cpp +++ b/src/Library/Items/Item.cpp @@ -3,8 +3,10 @@ bool CreatureLib::Library::Item::HasFlag(const Arbutils::CaseInsensitiveConstString& flag) const { return this->_flags.find(flag) != this->_flags.end(); } +bool CreatureLib::Library::Item::HasFlag(uint32_t flag) const { return this->_flags.find(flag) != this->_flags.end(); } + CreatureLib::Library::Item::Item(const Arbutils::CaseInsensitiveConstString& name, CreatureLib::Library::ItemCategory category, CreatureLib::Library::BattleItemCategory battleCategory, int32_t price, - std::unordered_set flags) + std::unordered_set flags) : _name(name), _category(category), _battleCategory(battleCategory), _price(price), _flags(flags) {} diff --git a/src/Library/Items/Item.hpp b/src/Library/Items/Item.hpp index 58e6a61..419d25b 100644 --- a/src/Library/Items/Item.hpp +++ b/src/Library/Items/Item.hpp @@ -14,11 +14,11 @@ namespace CreatureLib::Library { ItemCategory _category; BattleItemCategory _battleCategory; int32_t _price; - std::unordered_set _flags; + std::unordered_set _flags; public: Item(const Arbutils::CaseInsensitiveConstString& name, ItemCategory category, BattleItemCategory battleCategory, - int32_t price, std::unordered_set flags); + int32_t price, std::unordered_set flags); inline const Arbutils::CaseInsensitiveConstString& GetName() const { return _name; } inline ItemCategory GetCategory() const { return _category; } @@ -26,6 +26,7 @@ namespace CreatureLib::Library { inline const int32_t GetPrice() const { return _price; } bool HasFlag(const Arbutils::CaseInsensitiveConstString& flag) const; + bool HasFlag(uint32_t flag) const; }; }