aozhiwei 5a5e8fddcb 1
2022-12-22 16:38:51 +08:00

47 lines
1.6 KiB
C++

#pragma once
#define DECLARE_COMMON_HEAD(classname, base, filename, key, tbl_type) \
class classname : public base \
{ \
protected: \
friend class MetaMgr; \
static constexpr int table_type = tbl_type; \
static constexpr const char* prim_key = #key; \
static constexpr const char* table_name= #filename; \
static std::vector<classname*> raw_list; \
static std::map<long long, classname*> id_hash; \
static std::map<std::string, classname*> name_hash;
#define DECLARE_ID_TABLE(classname, base, filename, key) \
DECLARE_COMMON_HEAD(classname, base, filename, key, 1) \
public: \
static classname* GetById(long long id) \
{ \
auto itr = id_hash.find(id); \
return itr != id_hash.end() ? itr->second : nullptr; \
};
#define DECLARE_AUTO_ID_TABLE(classname, base, filename) \
DECLARE_COMMON_HEAD(classname, base, filename, key, 0) \
public: \
static classname* GetById(long long id) \
{ \
auto itr = id_hash.find(id); \
return itr != id_hash.end() ? itr->second : nullptr; \
};
#define DECLARE_NAME_TABLE(classname, base, filename, key) \
DECLARE_COMMON_HEAD(classname, base, filename, key, 2) \
public: \
static classname* GetByName(const std::string& name) \
{ \
auto itr = name_hash.find(name); \
return itr != name_hash.end() ? itr->second : nullptr; \
};
#define IMPL_TABLE(classname) \
std::vector<classname*> classname::raw_list; \
std::map<long long, classname*> classname::id_hash; \
std::map<std::string, classname*> classname::name_hash;