417 lines
8.1 KiB
C++
417 lines
8.1 KiB
C++
|
|
#ifndef _SCRIPT_VALUE_HPP_
|
|||
|
|
#define _SCRIPT_VALUE_HPP_
|
|||
|
|
|
|||
|
|
/************************************************************************
|
|||
|
|
* LUA<EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>nil<EFBFBD><EFBFBD>bool<EFBFBD><EFBFBD>number<EFBFBD><EFBFBD>string<EFBFBD><EFBFBD>lightuserdata<EFBFBD><EFBFBD>userdata<EFBFBD><EFBFBD>cfunction
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD>CScriptValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ洢<EFBFBD><EFBFBD>Щֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õIJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>洢<EFBFBD>ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ʹ<EFBFBD>á<EFBFBD>
|
|||
|
|
*
|
|||
|
|
************************************************************************/
|
|||
|
|
|
|||
|
|
class ScriptValue
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
enum ScriptValueType
|
|||
|
|
{
|
|||
|
|
vNull = LUA_TNIL, // nilֵ
|
|||
|
|
vBool = LUA_TBOOLEAN, // boolֵ
|
|||
|
|
vLightData = LUA_TLIGHTUSERDATA,//<2F><>ָ<EFBFBD><D6B8>ֵ
|
|||
|
|
vNumber = LUA_TNUMBER,//numberֵ
|
|||
|
|
vString = LUA_TSTRING,//stringֵ
|
|||
|
|
vCFunction = LUA_TFUNCTION,//C<><43><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ֵ
|
|||
|
|
vUserData = LUA_TUSERDATA,//userdataֵ
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>ֵ<EFBFBD><D6B5>ֵ<EFBFBD><D6B5><EFBFBD>ݽṹ
|
|||
|
|
union ScriptValueData
|
|||
|
|
{
|
|||
|
|
bool boVal; //boolֵ
|
|||
|
|
const void* lightPtr; //ָ<><D6B8>ֵ
|
|||
|
|
double numVal; //numberֵ
|
|||
|
|
struct
|
|||
|
|
{
|
|||
|
|
const char* str; //<2F>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
size_t len;//<2F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
} strVal; //<2F>ַ<EFBFBD><D6B7><EFBFBD>ֵ
|
|||
|
|
lua_CFunction cfnVal;//C<><43><EFBFBD><EFBFBD>ֵ
|
|||
|
|
struct
|
|||
|
|
{
|
|||
|
|
const void* ptr; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
size_t size;//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
} userVal; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
ScriptValue()
|
|||
|
|
{
|
|||
|
|
type_ = vNull;
|
|||
|
|
data_.userVal.ptr = 0;
|
|||
|
|
data_.userVal.size = 0;
|
|||
|
|
}
|
|||
|
|
~ScriptValue()
|
|||
|
|
{
|
|||
|
|
clear();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
inline void clear()
|
|||
|
|
{
|
|||
|
|
if (type_ != vNull)
|
|||
|
|
{
|
|||
|
|
if (type_ == vString)
|
|||
|
|
free((void*)data_.strVal.str);
|
|||
|
|
else if (type_ == vUserData)
|
|||
|
|
free((void*)data_.userVal.ptr);
|
|||
|
|
|
|||
|
|
type_ = vNull;
|
|||
|
|
data_.userVal.ptr = 0;
|
|||
|
|
data_.userVal.size = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
inline ScriptValueType getType()
|
|||
|
|
{
|
|||
|
|
return type_;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD>С
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vNull<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ0,
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vBool<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪsizeof(bool),
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vLightData<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>sizeof(LPCVOID),
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vNumber<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>sizeof(double),
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vString<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>,
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vCFunction<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>sizeof(lua_CFunction),
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>vUserData<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ֽڳ<EFBFBD><EFBFBD><EFBFBD>,
|
|||
|
|
*/
|
|||
|
|
inline size_t getSize()
|
|||
|
|
{
|
|||
|
|
switch (type_)
|
|||
|
|
{
|
|||
|
|
case vBool:
|
|||
|
|
return sizeof(data_.boVal);
|
|||
|
|
|
|||
|
|
case vLightData:
|
|||
|
|
return sizeof(data_.lightPtr);
|
|||
|
|
|
|||
|
|
case vNumber:
|
|||
|
|
return sizeof(data_.numVal);
|
|||
|
|
|
|||
|
|
case vString:
|
|||
|
|
return data_.strVal.len;
|
|||
|
|
|
|||
|
|
case vCFunction:
|
|||
|
|
return sizeof(data_.cfnVal);
|
|||
|
|
|
|||
|
|
case vUserData:
|
|||
|
|
return data_.userVal.size;
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
inline void loadFromStream(stream::BaseStream& stm)
|
|||
|
|
{
|
|||
|
|
clear();
|
|||
|
|
|
|||
|
|
stm.read(&type_, sizeof(uint8_t));
|
|||
|
|
|
|||
|
|
switch (type_)
|
|||
|
|
{
|
|||
|
|
case vBool:
|
|||
|
|
stm.read(&data_.boVal, sizeof(data_.boVal));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vLightData:
|
|||
|
|
stm.read(&data_.lightPtr, sizeof(data_.lightPtr));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vNumber:
|
|||
|
|
stm.read(&data_.numVal, sizeof(data_.numVal));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vString:
|
|||
|
|
stm.read(&data_.strVal.len, sizeof(data_.strVal.len));
|
|||
|
|
data_.strVal.str = (const char*)malloc(data_.strVal.len + sizeof(int));
|
|||
|
|
stm.read((void*)data_.strVal.str, (const int)(data_.strVal.len * sizeof(data_.strVal.str[0])));
|
|||
|
|
((char*)(data_.strVal.str))[data_.strVal.len] = 0;
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vCFunction:
|
|||
|
|
stm.read(&data_.cfnVal, sizeof(data_.cfnVal));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vUserData:
|
|||
|
|
stm.read(&data_.userVal.size, sizeof(data_.userVal.size));
|
|||
|
|
data_.userVal.ptr = malloc(data_.userVal.size);
|
|||
|
|
stm.read((void*)data_.userVal.ptr, (const int)(data_.userVal.size));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>浽<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
inline int64_t saveToStream(stream::BaseStream& stm) const
|
|||
|
|
{
|
|||
|
|
int64_t dwPos = stm.getPosition();
|
|||
|
|
|
|||
|
|
stm.write(&type_, sizeof(uint8_t));
|
|||
|
|
|
|||
|
|
switch (type_)
|
|||
|
|
{
|
|||
|
|
case vBool:
|
|||
|
|
stm.write(&data_.boVal, sizeof(data_.boVal));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vLightData:
|
|||
|
|
stm.write(&data_.lightPtr, sizeof(data_.lightPtr));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vNumber:
|
|||
|
|
stm.write(&data_.numVal, sizeof(data_.numVal));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vString:
|
|||
|
|
stm.write(&data_.strVal.len, sizeof(data_.strVal.len));
|
|||
|
|
stm.write(data_.strVal.str, data_.strVal.len * sizeof(data_.strVal.str[0]));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vCFunction:
|
|||
|
|
stm.write(&data_.cfnVal, sizeof(data_.cfnVal));
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case vUserData:
|
|||
|
|
stm.write(&data_.userVal.size, sizeof(data_.userVal.size));
|
|||
|
|
stm.write(data_.userVal.ptr, data_.userVal.size);
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return stm.getPosition() - dwPos;
|
|||
|
|
}
|
|||
|
|
public:
|
|||
|
|
#define SETLUANUMBER(val) clear(); type_ = vNumber; data_.numVal = (double)val;
|
|||
|
|
inline ScriptValue& operator = (const int val)
|
|||
|
|
{
|
|||
|
|
SETLUANUMBER(val);
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
inline ScriptValue& operator = (const unsigned int val)
|
|||
|
|
{
|
|||
|
|
SETLUANUMBER(val);
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
inline ScriptValue& operator = (const int64_t val)
|
|||
|
|
{
|
|||
|
|
SETLUANUMBER(val);
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline ScriptValue& operator = (const uint64_t val)
|
|||
|
|
{
|
|||
|
|
SETLUANUMBER(val);
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline ScriptValue& operator = (const double val)
|
|||
|
|
{
|
|||
|
|
SETLUANUMBER(val);
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
inline ScriptValue& operator = (const float val)
|
|||
|
|
{
|
|||
|
|
SETLUANUMBER(val);
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
/* <20><>boolֵ<6C>ĸ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>㺯<EFBFBD><E3BAAF> */
|
|||
|
|
inline ScriptValue& operator = (const bool val)
|
|||
|
|
{
|
|||
|
|
clear();
|
|||
|
|
type_ = vBool;
|
|||
|
|
data_.boVal = val;
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
inline ScriptValue& operator = (const char* val)
|
|||
|
|
{
|
|||
|
|
clear();
|
|||
|
|
type_ = vString;
|
|||
|
|
|
|||
|
|
if (val)
|
|||
|
|
{
|
|||
|
|
data_.strVal.len = strlen(val);
|
|||
|
|
data_.strVal.str = (const char*)malloc(data_.strVal.len + sizeof(int));
|
|||
|
|
memcpy((char*)data_.strVal.str, val, data_.strVal.len);
|
|||
|
|
((char*)(data_.strVal.str))[data_.strVal.len] = 0;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
data_.strVal.len = 0;
|
|||
|
|
data_.strVal.str = NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline ScriptValue& operator = (const void* val)
|
|||
|
|
{
|
|||
|
|
clear();
|
|||
|
|
type_ = vLightData;
|
|||
|
|
data_.lightPtr = val;
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20><>LUAC<41><43><EFBFBD><EFBFBD>ָ<EFBFBD>루lua_CFunction<6F><6E>ֵ<EFBFBD>ĸ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>㺯<EFBFBD><E3BAAF> */
|
|||
|
|
inline ScriptValue& operator = (const lua_CFunction val)
|
|||
|
|
{
|
|||
|
|
clear();
|
|||
|
|
type_ = vCFunction;
|
|||
|
|
data_.cfnVal = val;
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20><>ScriptValueDataֵ<61>ĸ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>㺯<EFBFBD><E3BAAF> */
|
|||
|
|
inline ScriptValue& operator = (const ScriptValue& val)
|
|||
|
|
{
|
|||
|
|
switch (val.type_)
|
|||
|
|
{
|
|||
|
|
case vBool:
|
|||
|
|
return operator = (val.data_.boVal);
|
|||
|
|
|
|||
|
|
case vLightData:
|
|||
|
|
return operator = (val.data_.lightPtr);
|
|||
|
|
|
|||
|
|
case vNumber:
|
|||
|
|
return operator = (val.data_.numVal);
|
|||
|
|
|
|||
|
|
case vString:
|
|||
|
|
return operator = (val.data_.strVal.str);
|
|||
|
|
|
|||
|
|
case vCFunction:
|
|||
|
|
return operator = (val.data_.cfnVal);
|
|||
|
|
|
|||
|
|
case vUserData:
|
|||
|
|
return SetUserData(val.data_.userVal.ptr, val.data_.userVal.size);
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
clear();
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/* <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> */
|
|||
|
|
inline ScriptValue& SetUserData(const void* data, size_t dwSize)
|
|||
|
|
{
|
|||
|
|
clear();
|
|||
|
|
type_ = vUserData;
|
|||
|
|
data_.userVal.size = dwSize;
|
|||
|
|
data_.userVal.ptr = malloc(dwSize);
|
|||
|
|
memcpy((void*)data_.userVal.ptr, data, dwSize);
|
|||
|
|
return *this;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
//ת<><D7AA>Ϊint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline operator int ()
|
|||
|
|
{
|
|||
|
|
if (type_ == vNumber)
|
|||
|
|
return (int)data_.numVal;
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
//ת<><D7AA>Ϊint64<36><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline operator int64_t ()
|
|||
|
|
{
|
|||
|
|
if (type_ == vNumber)
|
|||
|
|
return (int64_t)data_.numVal;
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
//ת<><D7AA>Ϊdouble<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline operator double()
|
|||
|
|
{
|
|||
|
|
if (type_ == vNumber)
|
|||
|
|
return data_.numVal;
|
|||
|
|
|
|||
|
|
return 0.0;
|
|||
|
|
}
|
|||
|
|
//ת<><D7AA>Ϊfloat<61><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline operator float()
|
|||
|
|
{
|
|||
|
|
if (type_ == vNumber)
|
|||
|
|
return (float)data_.numVal;
|
|||
|
|
|
|||
|
|
return 0.0;
|
|||
|
|
}
|
|||
|
|
/* ת<><D7AA>Ϊbool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
inline operator bool ()
|
|||
|
|
{
|
|||
|
|
switch (type_)
|
|||
|
|
{
|
|||
|
|
case vBool:
|
|||
|
|
return data_.boVal;
|
|||
|
|
|
|||
|
|
case vLightData:
|
|||
|
|
return data_.lightPtr != NULL;
|
|||
|
|
|
|||
|
|
case vNumber:
|
|||
|
|
return data_.numVal != 0;
|
|||
|
|
|
|||
|
|
case vString:
|
|||
|
|
return data_.strVal.str && strcmp("true", data_.strVal.str) == 0;
|
|||
|
|
|
|||
|
|
case vCFunction:
|
|||
|
|
return data_.cfnVal != NULL;
|
|||
|
|
|
|||
|
|
case vUserData:
|
|||
|
|
return data_.userVal.ptr != NULL;
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//ת<><D7AA>Ϊconst char*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline operator const char* ()
|
|||
|
|
{
|
|||
|
|
if (type_ == vString)
|
|||
|
|
return (const char*)data_.strVal.str;
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
//ת<><D7AA>Ϊconst lua_CFunction<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline operator const lua_CFunction()
|
|||
|
|
{
|
|||
|
|
if (type_ == vCFunction)
|
|||
|
|
return data_.cfnVal;
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
//ת<><D7AA>Ϊconst void*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline operator const void* ()
|
|||
|
|
{
|
|||
|
|
if (type_ == vLightData || type_ == vUserData)
|
|||
|
|
return (const void*)data_.lightPtr;
|
|||
|
|
else if (type_ == vString)
|
|||
|
|
return (const void*)data_.strVal.str;
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
protected:
|
|||
|
|
ScriptValueType type_; //ֵ<><D6B5><EFBFBD><EFBFBD>
|
|||
|
|
ScriptValueData data_; //ֵ
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|