Lua 디자인 과 구현 (2) - Lua 의 데이터 형식
3739 단어 Lua
QQ: 1841545843 메 일 박스:[email protected]
struct base{
int type; //
};
struct string {
struct base info;
int len;
cahr* data[0];
};
struct number {
struct base info;
double num;
};
struct string{
int len;
char * data[0];
};
struct number {
double num;
};
struct value {
int type;
union{
string str;
number num;
} value;
};
/*
** basic types //
*/
#define LUA_TNONE (-1) //
#define LUA_TNIL 0 //
#define LUA_TBOOLEAN 1 //
#define LUA_TLIGHTUSERDATA 2 // void*
#define LUA_TNUMBER 3 // lua_Number
#define LUA_TSTRING 4 // TString
#define LUA_TTABLE 5 // Table
#define LUA_TFUNCTION 6 // CClosure\ LClosure
#define LUA_TUSERDATA 7 // void*
#define LUA_TTHREAD 8 // Lua , lua_State
Lua 내부 에서 하나의 매크로 로 데이터 형식 에 GC // LUS_TSTRING GC
#define iscollectable(o) (ttype(o) >= LUA_TSTRING)
가 필요 하 다 는 것 을 나타 낸다. GC 작업 을 해 야 하 는 데이터 형식 에는 모두 CommonHeader 매크로 가 정의 하 는 구성원 이 있 고 이 구성원 은 구조 체 가 정의 하 는 초기 부분 에 있다.typedef struct Table { CommonHeader; // GC lu_byte flags; /* 1<
CommonHeader的定义:
/*
** Common Header for all collectable objects (in macro( ) form, to be
** included in other objects)
**
** next GC
** tt ,
** marked GC
*/
#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked
또 하나의 GCheader 구조 체 가 있 는데 그 중에서 구성원 은 CommonHeader /*
** Common header in struct form
*/
typedef struct GCheader {
CommonHeader;
} GCheader;
만 Lua 에서 GCobject 를 사용 하고 연합 체 는 쓰레기 회수 가 필요 한 모든 데이터 유형 을 포괄 한다 /*
** Union of all collectable objects
*/
union GCObject {
GCheader gch;
union TString ts;
union Udata u;
union Closure cl;
struct Table h;
struct Proto p;
struct UpVal uv;
struct lua_State th; /* thread */
};
결론:/*
** Union of all Lua values
**
*/
typedef union {
GCObject *gc;
void *p;
lua_Number n;
int b;
} Value;
/*
** Tagged Values
*/
#define TValuefields Value value; int tt
typedef struct lua_TValue {
TValuefields;
} TValue;
Lua 통용 데이터 구조 조직이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Lua 카운트다운 도구최근에 Lua가 카운트다운에 사용하는 작은 도구를 쓰고 있는데 대략적인 내용을 공유합니다. 사실 전체적인 사고방식은 매우 간단하다. 바로 시간 스탬프를 필요한 격식으로 바꾸어 시간을 재는 것이다.그러나 계산 정밀도가...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.