CreatureLib/CInterface/Library/BaseLibrary.cpp

50 lines
5.5 KiB
C++

#include "../Core.hpp"
#define BASELIBRARY(simpleName, fullname, returnType) \
export_func u8 simpleName##_Insert(fullname* p, const char* name, returnType* t) { \
Try(p->Insert(ArbUt::StringView(name), t);) \
} \
\
export_func u8 simpleName##_Delete(fullname* p, const char* name) { \
Try(p->DeleteByHash(ArbUt::StringView::CalculateHash(name));) \
} \
\
export_func u8 simpleName##_DeleteWithHash(fullname* p, u32 hashedKey) { Try(p->DeleteByHash(hashedKey);) } \
\
export_func bool simpleName##_TryGet(fullname* p, const char* name, const returnType*& out) { \
ArbUt::BorrowedPtr<const returnType> o; \
auto v = p->TryGetByHash(ArbUt::StringView::CalculateHash(name)); \
if (!v.has_value()) { \
out = nullptr; \
return false; \
} else { \
out = v.value(); \
return true; \
} \
} \
\
export_func bool simpleName##_TryGetWithHash(fullname* p, u32 hashedKey, const returnType*& out) { \
ArbUt::BorrowedPtr<const returnType> o; \
auto v = p->TryGetByHash(hashedKey); \
if (!v.has_value()) { \
out = nullptr; \
return false; \
} else { \
out = v.value(); \
return true; \
} \
} \
\
export_func u8 simpleName##_Get(fullname* p, const char* name, const returnType*& out) { \
Try(out = p->GetByHash(ArbUt::StringView::CalculateHash(name)).GetRaw();) \
} \
\
export_func u8 simpleName##_GetWithHash(fullname* p, u32 hashedKey, const returnType*& out) { \
Try(out = p->GetByHash(hashedKey).GetRaw();) \
} \
\
export_func size_t simpleName##_GetCount(fullname* p) { return p->GetCount(); } \
export_func u8 simpleName##_GetAtIndex(fullname* p, size_t index, const returnType*& out) { \
Try(out = p->GetAtIndex(index).GetRaw();) \
}