Files
mir_server/sdk/srvlib/include/CustomLuaConfig.h

137 lines
7.8 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
#include "Define.h"
class CCustomLuaConfig
: public CCustomLuaScript
{
public:
typedef CCustomLuaScript Inherited;
typedef wylib::misc::CRefObjectImpl<String> TableName;
private:
wylib::container::CBaseList<TableName*> m_TableStacks; //已打开表名称列表
protected:
//显示脚本错误内容
void showError(LPCTSTR sError);
//显示表不存在的错误
void showTableNotExists(LPCSTR sTableName);
//显示没有包含有效值的错误
void showFieldDoesNotContainValue(LPCSTR sFieldName, LPCTSTR sValueType);
//通过LPCSTR字符串构造一个TableName
static TableName* createTableName(LPCSTR sName);
protected:
/* 打开脚本内的全局表成功则返回true失败会引发showError。
使使closeTable将表关闭
*/
bool openGlobalTable(LPCSTR sTableName);
/* 打开当前表中的子成员表成功则返回true失败会引发showError。
使使closeTable将表关闭
*/
bool openFieldTable(LPCSTR sTableName);
/* 开始遍历当前已经打开的表。
0true
*/
bool enumTableFirst();
/* 继续遍历当前已经打开的表。
使enumTableFirst使enumTableNext
FALSEenumTableNext
*/
bool enumTableNext();
/* 终止对当前表的枚举。
enumTableFirst后开始对表的遍历使enumTableNext持续遍历直到
false
使endTableEnum来结束表的遍历
*/
void endTableEnum();
/* 将当前表中的第IndexStartFromOne索引的个成员当做表打开。成功则返回true失败会引发showError。
IndexStartFromOne索引是从1开始的lua语言的索引标准IndexStartFromOne
FALSE并引发showError
*/
bool getFieldIndexTable(const int IndexStartFromOne);
/* 测试当前表中是否存在名为sTableName的字成员表如果存在此名称的成员且值是一个表类型则返回true。
*/
bool feildTableExists(LPCSTR sTableName);
// 是否存在名为sTableName的全局表
bool globalTableExists(LPCSTR sTableName);
/* 关闭当前打开的表。 */
void closeTable();
/* 获取当前已经打开的表的完整路径,路径分割符为'.'
Retval相同Retval中并作为返回值
*/
String& getTablePath(String& Retval);
/* 在表枚举过程中获取当前枚举成员的名称
*/
wylib::string::CAnsiString& getKeyName(wylib::string::CAnsiString& Retval);
/* 获取表枚举程中获取当前枚举成员值的数据类型
*/
inline int getValueType(){ return lua_type(m_pLua, -1); }
/* 获取表中名为sFieldName的布尔值。
sFieldName参数值为NULLenumTableFirst或enumTableNext进行表枚举的
pIsValid参数中存储true
pIsValid参数中存储falsefalse
*/
bool getFieldBoolean(LPCSTR sFieldName, const bool* pDefValue = NULL, BOOL* pIsValid = NULL);
/* 获取表中名为sFieldName的数字值。
sFieldName参数值为NULLenumTableFirst或enumTableNext进行表枚举的
pIsValid参数中存储true
pIsValid参数中存储false0
*/
DOUBLE getFieldNumber(LPCSTR sFieldName, const DOUBLE* pDefValue = NULL, BOOL* pIsValid = NULL);
/* 获取表中名为sFieldName的64位整数值。
sFieldName参数值为NULLenumTableFirst或enumTableNext进行表枚举的
pIsValid参数中存储true
pIsValid参数中存储false0
*/
INT64 getFieldInt64(LPCSTR sFieldName,const PINT64 pDefValue = NULL, BOOL* pIsValid = NULL);
/* 获取表中名为sFieldName的32位整数值。
sFieldName参数值为NULLenumTableFirst或enumTableNext进行表枚举的
pIsValid参数中存储true
pIsValid参数中存储false0
*/
INT getFieldInt(LPCSTR sFieldName, const PINT pDefValue = NULL, BOOL* pIsValid = NULL);
/* 获取表中名为sFieldName的字符串值。
sFieldName参数值为NULLenumTableFirst或enumTableNext进行表枚举的
pIsValid参数中存储true
使
使
pIsValid参数中存储falseNULL
*/
LPCSTR getFieldString(LPCSTR sFieldName, LPCSTR pDefValue = NULL, BOOL* pIsValid = NULL);
/* 获取表中名为sFieldName的字符串值。
sFieldName参数值为NULLenumTableFirst或enumTableNext进行表枚举的
sBuffer中
dwBufLen参数限制dwBufLen参数是sBuffer的最大长度
dwBufLen-1dwBufLen-1
dwBufLen大于0sBuffer添加终止字符
-1Retval的内存地址有效则会填充守字符为0
*/
INT_PTR getFieldStringBuffer(LPCSTR sFieldName, OUT LPSTR sBuffer, IN SIZE_T dwBufLen,const LPCSTR sDefBuff = "");
bool getIndexBoolean(LUA_INTEGER _index, const bool *pDefValue = NULL, BOOL* pIsValid = NULL);
DOUBLE getIndexNumber(LUA_INTEGER _index, const DOUBLE *pDefValue = NULL, BOOL* pIsValid = NULL);
INT64 getIndexINT64(LUA_INTEGER _index, const PINT pDefValue = NULL, BOOL* pIsValid = NULL);
INT getIndexInt(LUA_INTEGER _index, const PINT pDefValue = NULL, BOOL* pIsValid = NULL);
LPCSTR getIndexString(LUA_INTEGER _index, const LPCSTR pDefValue = NULL, BOOL* pIsValid = NULL);
INT_PTR getIndexStringBuffer(LUA_INTEGER _index, OUT LPSTR sBuffer, IN SIZE_T dwBufLen);
bool isExistString(LPCSTR sFieldName);
public:
CCustomLuaConfig();
~CCustomLuaConfig();
};