first commit
This commit is contained in:
187
include/modules/script_squirrel/cobject/squirrel_object.h
Normal file
187
include/modules/script_squirrel/cobject/squirrel_object.h
Normal file
@ -0,0 +1,187 @@
|
||||
#ifndef _SQUIRREL_OBJECT_H_
|
||||
#define _SQUIRREL_OBJECT_H_
|
||||
|
||||
class SquirrelObject
|
||||
{
|
||||
// friend class SquirrelVM;
|
||||
public:
|
||||
SquirrelObject(HSQUIRRELVM vm);
|
||||
virtual ~SquirrelObject();
|
||||
SquirrelObject(const SquirrelObject &o);
|
||||
SquirrelObject(HSQOBJECT &o);
|
||||
SquirrelObject & operator =(const SquirrelObject &o);
|
||||
SquirrelObject & operator =(int n);
|
||||
void Append(const SquirrelObject &o);
|
||||
void AttachToStackObject(int idx);
|
||||
SquirrelObject Clone();
|
||||
bool SetValue(const SquirrelObject &key,const SquirrelObject &val);
|
||||
|
||||
bool SetValue(SQInteger key,const SquirrelObject &val);
|
||||
bool SetValue(int key,bool b);
|
||||
bool SetValue(int key,int n);
|
||||
bool SetValue(int key,float f);
|
||||
bool SetValue(int key,const SQChar *s);
|
||||
|
||||
bool SetValue(const SQChar *key,const SquirrelObject &val);
|
||||
bool SetValue(const SQChar *key,bool b);
|
||||
bool SetValue(const SQChar *key,int n);
|
||||
bool SetValue(const SQChar *key,float f);
|
||||
bool SetValue(const SQChar *key,const SQChar *s);
|
||||
|
||||
bool SetInstanceUP(SQUserPointer up);
|
||||
bool IsNull() const;
|
||||
bool IsNumeric() const;
|
||||
int Len() const;
|
||||
bool SetDelegate(SquirrelObject &obj);
|
||||
SquirrelObject GetDelegate();
|
||||
const SQChar* ToString();
|
||||
bool ToBool();
|
||||
SQInteger ToInteger();
|
||||
SQFloat ToFloat();
|
||||
SQUserPointer GetInstanceUP(SQUserPointer tag) const;
|
||||
SquirrelObject GetValue(const SQChar *key) const;
|
||||
bool Exists(const SQChar *key) const;
|
||||
float GetFloat(const SQChar *key) const;
|
||||
int GetInt(const SQChar *key) const;
|
||||
const SQChar *GetString(const SQChar *key) const;
|
||||
bool GetBool(const SQChar *key) const;
|
||||
SquirrelObject GetValue(int key) const;
|
||||
float GetFloat(int key) const;
|
||||
int GetInt(int key) const;
|
||||
const SQChar *GetString(int key) const;
|
||||
bool GetBool(int key) const;
|
||||
SquirrelObject GetAttributes(const SQChar *key = 0);
|
||||
SQObjectType GetType();
|
||||
HSQOBJECT &GetObject(){return _o;}
|
||||
bool BeginIteration();
|
||||
bool Next(SquirrelObject &key,SquirrelObject &value);
|
||||
void EndIteration();
|
||||
private:
|
||||
bool GetSlot(const SQChar *name) const;
|
||||
bool GetSlot(int key) const;
|
||||
HSQOBJECT _o;
|
||||
HSQUIRRELVM vm;
|
||||
};
|
||||
|
||||
struct StackHandler {
|
||||
StackHandler(HSQUIRRELVM v) {
|
||||
_top = sq_gettop(v);
|
||||
this->v = v;
|
||||
}
|
||||
SQFloat GetFloat(int idx) {
|
||||
SQFloat x = 0.0f;
|
||||
if(idx > 0 && idx <= _top) {
|
||||
sq_getfloat(v,idx,&x);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
SQInteger GetInt(int idx) {
|
||||
SQInteger x = 0;
|
||||
if(idx > 0 && idx <= _top) {
|
||||
sq_getinteger(v,idx,&x);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
HSQOBJECT GetObject(int idx) {
|
||||
HSQOBJECT x;
|
||||
if(idx > 0 && idx <= _top) {
|
||||
sq_resetobject(&x);
|
||||
sq_getstackobj(v,idx,&x);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
const SQChar *GetString(int idx)
|
||||
{
|
||||
const SQChar *x = 0;
|
||||
if(idx > 0 && idx <= _top) {
|
||||
sq_getstring(v,idx,&x);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
SQUserPointer GetUserPointer(int idx)
|
||||
{
|
||||
SQUserPointer x = 0;
|
||||
if(idx > 0 && idx <= _top) {
|
||||
sq_getuserpointer(v,idx,&x);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
SQUserPointer GetInstanceUp(int idx,SQUserPointer tag)
|
||||
{
|
||||
SQUserPointer self;
|
||||
if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer*)&self,tag)))
|
||||
return 0;
|
||||
return self;
|
||||
}
|
||||
SQUserPointer GetUserdata(int idx,SQUserPointer tag)
|
||||
{
|
||||
SQUserPointer otag;
|
||||
SQUserPointer up;
|
||||
if(idx > 0 && idx <= _top) {
|
||||
if(SQ_SUCCEEDED(sq_getuserdata(v,idx,&up,&otag))) {
|
||||
if(tag == otag)
|
||||
return up;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
bool GetBool(int idx)
|
||||
{
|
||||
SQBool ret;
|
||||
if(idx > 0 && idx <= _top) {
|
||||
if(SQ_SUCCEEDED(sq_getbool(v,idx,&ret)))
|
||||
return ret ? true : false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
int GetType(int idx)
|
||||
{
|
||||
if(idx > 0 && idx <= _top) {
|
||||
return sq_gettype(v,idx);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
SQInteger GetParamCount() {
|
||||
return _top;
|
||||
}
|
||||
int Return(const SQChar *s)
|
||||
{
|
||||
sq_pushstring(v,s,-1);
|
||||
return 1;
|
||||
}
|
||||
int Return(float f)
|
||||
{
|
||||
sq_pushfloat(v,f);
|
||||
return 1;
|
||||
}
|
||||
int Return(int i)
|
||||
{
|
||||
sq_pushinteger(v,i);
|
||||
return 1;
|
||||
}
|
||||
int Return(unsigned int i)
|
||||
{
|
||||
sq_pushinteger(v,i);
|
||||
return 1;
|
||||
}
|
||||
int Return(bool b)
|
||||
{
|
||||
sq_pushbool(v,b);
|
||||
return 1;
|
||||
}
|
||||
int Return(SquirrelObject &o)
|
||||
{
|
||||
sq_pushobject(v,o.GetObject());
|
||||
return 1;
|
||||
}
|
||||
int Return() { return 0; }
|
||||
SQInteger ThrowError(const SQChar *error) {
|
||||
return sq_throwerror(v,error);
|
||||
}
|
||||
private:
|
||||
SQInteger _top;
|
||||
HSQUIRRELVM v;
|
||||
};
|
||||
|
||||
#endif //_SQUIRREL_OBJECT_H_
|
||||
Reference in New Issue
Block a user