Files
BlitzNext/Runtime/lib/basic.hpp
T
Michael Fabian 'Xaymar' Dirks 2196cb8419 runtime: Formatting
2019-01-18 17:04:17 +01:00

159 lines
3.1 KiB
C++

#ifndef BASIC_H
#define BASIC_H
#include <mutex>
#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