| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #ifndef BASIC_H
- #define BASIC_H
- #include <string>
- enum{
- BBTYPE_END=0,
- BBTYPE_INT=1,BBTYPE_FLT=2,
- BBTYPE_STR=3,BBTYPE_CSTR=4,
- BBTYPE_OBJ=5,BBTYPE_VEC=6
- };
- #pragma pack( push,1 )
- struct BBObj;
- struct BBStr;
- struct BBType;
- struct BBObjType;
- struct BBVecType;
- union BBField;
- struct BBArray;
- struct BBObj{
- BBField *fields;
- BBObj *next,*prev;
- BBObjType *type;
- int ref_cnt;
- };
- struct BBType{
- int type;
- BBType( int n ):type(n){}
- };
- struct BBObjType : public BBType{
- BBObj used,free;
- int fieldCnt;
- BBType *fieldTypes[1];
- };
- struct BBVecType : public BBType{
- int size;
- BBType *elementType;
- };
- union BBField{
- int INT;
- float FLT;
- BBStr *STR;
- char *CSTR;
- BBObj *OBJ;
- void *VEC;
- };
- struct BBArray{
- void *data;
- int elementType,dims,scales[1];
- };
- struct BBStr : public std::string{
- BBStr *next,*prev;
- BBStr();
- BBStr( const char *s );
- BBStr( const char *s,int n );
- BBStr( const BBStr &s );
- BBStr( const std::string &s );
- BBStr &operator=( const char *s );
- BBStr &operator=( const BBStr &s );
- BBStr &operator=( const std::string &s );
- ~BBStr();
- void *operator new( size_t size );
- void operator delete( void *q );
- void *operator new( size_t size,const char *file,int line ){ return operator new( size ); }
- void operator delete( void *q,const char *file,int line ){ operator delete( q ); }
- };
- struct BBData{
- int fieldType;
- BBField field;
- };
- #pragma pack( pop )
- void basic_link();
- extern BBType _bbIntType;
- extern BBType _bbFltType;
- extern BBType _bbStrType;
- extern BBType _bbCStrType;
- BBStr * _bbStrLoad( BBStr **var );
- void _bbStrRelease( BBStr *str );
- void _bbStrStore( BBStr **var,BBStr *str );
- int _bbStrCompare( BBStr *lhs,BBStr *rhs );
- BBStr * _bbStrConcat( BBStr *s1,BBStr *s2 );
- int _bbStrToInt( BBStr *s );
- BBStr * _bbStrFromInt( int n );
- float _bbStrToFloat( BBStr *s );
- BBStr * _bbStrFromFloat( float n );
- BBStr * _bbStrConst( const char *s );
- void _bbDimArray( BBArray *array );
- void _bbUndimArray( BBArray *array );
- void _bbArrayBoundsEx();
- void * _bbVecAlloc( BBVecType *type );
- void _bbVecFree( void *vec,BBVecType *type );
- void _bbVecBoundsEx();
- BBObj * _bbObjNew( BBObjType *t );
- void _bbObjDelete( BBObj *obj );
- void _bbObjDeleteEach( BBObjType *type );
- void _bbObjRelease( BBObj *obj );
- void _bbObjStore( BBObj **var,BBObj *obj );
- BBObj * _bbObjNext( BBObj *obj );
- BBObj * _bbObjPrev( BBObj *obj );
- BBObj * _bbObjFirst( BBObjType *t );
- BBObj * _bbObjLast( BBObjType *t );
- void _bbObjInsBefore( BBObj *o1,BBObj *o2 );
- void _bbObjInsAfter( BBObj *o1,BBObj *o2 );
- int _bbObjEachFirst( BBObj **var,BBObjType *type );
- int _bbObjEachNext( BBObj **var );
- int _bbObjCompare( BBObj *o1,BBObj *o2 );
- BBStr * _bbObjToStr( BBObj *obj );
- int _bbObjToHandle( BBObj *obj );
- BBObj * _bbObjFromHandle( int handle,BBObjType *type );
- void _bbNullObjEx();
- void _bbRestore( BBData *data );
- int _bbReadInt();
- float _bbReadFloat();
- BBStr * _bbReadStr();
- int _bbAbs( int n );
- int _bbSgn( int n );
- int _bbMod( int x,int y );
- float _bbFAbs( float n );
- float _bbFSgn( float n );
- float _bbFMod( float x,float y );
- float _bbFPow( float x,float y );
- void bbRuntimeStats();
- #endif
|