79 lines
1.6 KiB
C++
79 lines
1.6 KiB
C++
#ifndef _LANG_SECTION_H_
|
||
#define _LANG_SECTION_H_
|
||
/************************************************************************
|
||
* 语言包配置节点类
|
||
*
|
||
* 配置节点可以是一个字符串或者是文字包,这取决于getType的类型。
|
||
*
|
||
* 此类的内存管理方式为使用MemoryContainer<char>进行,因此意味着内存将不会被释放,
|
||
* 除非构造时传递的内存管理器已经被释放。
|
||
*
|
||
************************************************************************/
|
||
class LangSection;
|
||
class LangSectionTable;
|
||
|
||
class LangSection
|
||
{
|
||
public:
|
||
enum ElementType
|
||
{
|
||
eInvalid,
|
||
ePacket, //类型是一个分类
|
||
eText, //类型是一个文字包
|
||
};
|
||
|
||
public:
|
||
LangSection();
|
||
LangSection(MemoryContainer<char>*);
|
||
~LangSection();
|
||
|
||
//获取节点类型
|
||
inline ElementType getType()
|
||
{
|
||
return type_;
|
||
}
|
||
//获取字符串值
|
||
inline const char* getText()
|
||
{
|
||
return data_.str_;
|
||
}
|
||
//获取名为sName的文字包节点
|
||
LangSection* getSection(const char* name);
|
||
//设置节点为字符串
|
||
void setText(const char* str);
|
||
//设置节点为文字包
|
||
void setPacket(size_t len);
|
||
//添加一个节点,此前必须调用setPacket设置当前节点类型为文字包
|
||
LangSection* addSection(const char* name);
|
||
|
||
protected:
|
||
//清空节点数据
|
||
void clear();
|
||
//内存申请函数,作用与c函数中的realloc实现相同,实现申请、扩展以及释放内存
|
||
void* Realloc(void* p, size_t s);
|
||
|
||
protected:
|
||
ElementType type_; //节点的类型
|
||
union
|
||
{
|
||
char* str_;
|
||
LangSectionTable* pack_;
|
||
} data_; //节点的数据
|
||
MemoryContainer<char>* alloctor_ptr_;
|
||
};
|
||
|
||
class LangSectionTable :
|
||
public BZHashTable<LangSection>
|
||
{
|
||
public:
|
||
typedef BZHashTable<LangSection> Inherited;
|
||
|
||
public:
|
||
LangSectionTable(size_t len);
|
||
~LangSectionTable();
|
||
};
|
||
|
||
#endif
|
||
|
||
|