s4g  0.9.2
высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++.
s4g_gc.h
См. документацию.
1 
2 /*
3 Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
4 license MIT see in LICENSE or
5 https://s4g.su/
6 */
7 
16 #ifndef __S4G_GC_H
17 #define __S4G_GC_H
18 
19 #include "limits.h"
20 #include "s4g_types.h"
21 #include "s4g_main.h"
22 
23 #define S4G_COND_TYPE1(s4gm, pVar,retval) if (!pVar){s4g_GenMsg(s4gm, S4G_MSG_LEVEL_ERROR, "variable is not init, api function [%s]",__FUNCTION__); return retval;}
24 #define S4G_COND_TYPE2(s4gm, pVar,retval) if (!pVar->m_pData){s4g_GenMsg(s4gm, S4G_MSG_LEVEL_ERROR, "variable is has not data, api function [%s]",__FUNCTION__); return retval;}
25 #define S4G_COND_TYPE_12(s4gm, pVar,retval) S4G_COND_TYPE1(s4gm, pVar,retval) S4G_COND_TYPE2(s4gm, pVar,retval)
26 
27 
28 
32 class s4g_GC
33 {
34 public:
35  s4g_GC(s4g_Main * ptr);
36  ~s4g_GC();
37 
40  void clear();
41 
43  void releaseEmptyPages();
44 
48  s4g_Table* getGtable(){ return m_pGtable; };
49 
53  s4g_Variable* getGvar(){ return m_pGvar; };
54 
57 
59  s4g_Data* createDataCopy(s4g_Data *pDataSrc, int typeData = S4G_GC_TYPE_DATA_FREE);
60 
62  s4g_Variable* createVarDataCopy(s4g_Variable *pVarSrc, int typeVar = S4G_GC_TYPE_VAR_FREE, int typeData = S4G_GC_TYPE_DATA_FREE, bool canCopyData = false);
63 
64 
67 
70 
73 
76 
79 
82 
85 
87  s4g_Variable* createVarInt(s4g_int num, int typeVar = S4G_GC_TYPE_VAR_FREE, int typeData = S4G_GC_TYPE_DATA_FREE);
88 
91 
94 
97 
99  s4g_Variable* createVarString(const char *szString, int typeVar = S4G_GC_TYPE_VAR_FREE, int typeData = S4G_GC_TYPE_DATA_FREE);
100 
103 
105  s4g_Variable* createVarClassEmpty(const char *szName, int typeVar = S4G_GC_TYPE_VAR_FREE, int typeData = S4G_GC_TYPE_DATA_FREE);
106 
109 
110 
112  s4g_Data* createDataInt(s4g_int num, int typeData = S4G_GC_TYPE_DATA_FREE);
113 
116 
119 
120 
123 
125  s4g_Variable* getVarBool(bool bf);
126 
127 
129  const char* getVarName(s4g_Variable *pVar, char* szName=0);
130 
131 
134  void assign(s4g_Variable *pVarDest, s4g_Variable *pVarSrc);
135 
137  s4g_int getInt(s4g_Variable *pVar);
138 
141 
144 
146  const char* getStr(s4g_Variable *pVar);
147 
149  String* getStr2(s4g_Variable *pVar);
150 
153 
156 
159 
162 
165 
168 
171 
174 
175  /*//! возвращает юзердату объекта класса, если есть
176  s4g_pdata* getClassObjectData(s4g_Variable *pVar);*/
177 
178 
181 
182 
184  s4g_OwnerVar* getContextOwner(ID id);
185 
187  s4g_OwnerVar* getDataOwner(ID id);
188 
189 
192 
195 
197  void activatePrev(ID idLastContext);
198 
200  ID deactivatePrev();
201 
203  void deleteTopContext(bool canClear);
204 
206  void removeTableInContext(ID id);
207 
209  void clearTopContext();
210 
211 
213  bool add2ConstContext(const char *szName, s4g_Variable *pVar);
214 
216  s4g_Variable* getFromConstContext(const char *szName);
217 
221  ID existsInAccessibleContexts(const char *szName, s4g_Variable **ppVar);
222 
225  s4g_Variable* getVarFromContextByNum(ID idRelativeTopContext, ID idVar);
226 
227 
229  void deleteData(s4g_Data *pData);
230 
232  void deleteVar(s4g_Variable *pVar);
233 
235  void collectGarbage();
236 
237 
239  void fixationConstVarData();
240 
241 
243  int getMemCountBusy();
244 
246  int getMemCountAllocated();
247 
248 protected:
249  friend class s4g_Main;
250  s4g_Main* s4gm;
251 
253  void allocMemContexts(int iCount = S4G_ADD_MEM_CONTEXTS);
254 
256  void addConstContext();
257 
261 
265 
268 
269 
272 
275 
278 
281 
283  MemAlloc<s4g_Variable, S4G_RESERVE_VALUE_MEM> m_oMemVar;
284 
286  MemAlloc<s4g_Data, S4G_RESERVE_DATA_MEM> m_oMemData;
287 
289  MemAlloc<s4g_Context, S4G_RESERVE_CONTEXTS_MEM> m_oMemContext;
290 
292  MemAlloc<String, S4G_RESERVE_STRING_MEM> m_oMemString;
293 
295  MemAlloc<s4g_Sfunction, S4G_RESERVE_SFUNC_MEM> m_oMemSFunc;
296 
298  MemAlloc<s4g_Table, S4G_RESERVE_TABLE_MEM> m_oMemTable;
299 
301  MemAlloc<s4g_Array, S4G_RESERVE_TABLE_MEM> m_oMemArray;
302 
304  MemAlloc<s4g_Class, S4G_RESERVE_CLASS_MEM> m_oMemClass;
305 
307  MemAlloc<s4g_ClassObject, S4G_RESERVE_CLASS_OBJECT_MEM> m_oMemObjClass;
308 
309 
312 
315 
318 };
319 
320 #endif
321 
322 //!@} gc
s4g_Table * getTable(s4g_Variable *pVar)
возвращает приведенное значение переменной к table.
Definition: s4g_gc.cpp:583
MemAlloc< s4g_ClassObject, S4G_RESERVE_CLASS_OBJECT_MEM > m_oMemObjClass
резервация памяти для объектов классов
Definition: s4g_gc.h:307
s4g_c_function getCfunc(s4g_Variable *pVar)
возвращает приведенное значение переменной к C/C++ функции
Definition: s4g_gc.cpp:604
s4g_Variable * createVarNull(int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением null (то есть пустую переменную)
Definition: s4g_gc.cpp:254
MemAlloc< s4g_Array, S4G_RESERVE_TABLE_MEM > m_oMemArray
резервация памяти для массивов
Definition: s4g_gc.h:301
S4G_TYPE
все типы данных которые могут быть использованы в скриптах
Definition: s4g.h:160
s4g_Variable * createVarSfuncEmpty(int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением скриптовой функции (пустой)
Definition: s4g_gc.cpp:383
s4g_Variable * getGvar()
возвращает переменную со значением таблицы глобального пространства имен
Definition: s4g_gc.h:53
void clearTopContext()
очистить верхний контекст
Definition: s4g_gc.cpp:1024
ID deactivatePrev()
деактивировать все предыдущие контексты, возвращает номер контекста который деактивирован последним ...
Definition: s4g_gc.cpp:1002
s4g_pdata getPdata(s4g_Variable *pVar)
возвращает приведенное значение переменной к юзердате
Definition: s4g_gc.cpp:618
s4g_Stack< s4g_Variable *, S4G_RESERVE_VALUE > m_aVars
массив переменных
Definition: s4g_gc.h:271
void removeTableInContext(ID id)
заменить таблицу в контексте на контекстную таблицу, ибо если этот вызов произошел то у нас стояла за...
Definition: s4g_gc.cpp:981
void releaseEmptyPages()
удаление пустых страниц памяти
Definition: s4g_gc.cpp:150
s4g_Variable * createVarData()
создать переменную и выделить память под значение
Definition: s4g_gc.cpp:165
const char * getStr(s4g_Variable *pVar)
возвращает приведенное значение переменной к константной строке
Definition: s4g_gc.cpp:569
тип скриптовая функция
Definition: s4g_types.h:362
s4g_Stack< s4g_Data *, S4G_RESERVE_DATA > m_aData
массив данных
Definition: s4g_gc.h:274
long s4g_int
int
Definition: s4g.h:270
void deleteVar(s4g_Variable *pVar)
удаление переменной
Definition: s4g_gc.cpp:718
#define S4G_GC_TYPE_DATA_FREE
простое публичное значение, когда счетчик ссылок обнулится можно удалять
Definition: s4g_types.h:34
MemAlloc< s4g_Variable, S4G_RESERVE_VALUE_MEM > m_oMemVar
резервация памяти для значений
Definition: s4g_gc.h:283
s4g_Variable * m_pGvar
переменная хранящая в себе глобальное пространство имен
Definition: s4g_gc.h:267
s4g_Data * createDataUint(s4g_uint num, int typeData=S4G_GC_TYPE_DATA_FREE)
создать uint со значением num.
Definition: s4g_gc.cpp:232
s4g_Variable * createVarArrayEmpty(int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением "пустой массив".
Definition: s4g_gc.cpp:294
s4g_float getFloat(s4g_Variable *pVar)
возвращает приведенное значение переменной к float.
Definition: s4g_gc.cpp:562
void * s4g_pdata
указатель
Definition: s4g.h:282
Заголовочный файл основы взаимодествия хоста со скриптами
s4g_Variable * createVarDataCopy(s4g_Variable *pVarSrc, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE, bool canCopyData=false)
создание копии переменной со значение, canCopyData - копировать ли данные, или просто присвоить (без ...
Definition: s4g_gc.cpp:186
void collectGarbage()
запуск сборки мусора
Definition: s4g_gc.cpp:724
таблица, наиболее распространенный тип в скриптах
Definition: s4g_types.h:123
MemAlloc< s4g_Context, S4G_RESERVE_CONTEXTS_MEM > m_oMemContext
резервация памяти для контекстов
Definition: s4g_gc.h:289
s4g_ClassObject * getClassObject(s4g_Variable *pVar)
возвращает приведенное значение переменной к объекту класса
Definition: s4g_gc.cpp:632
#define S4G_GC_TYPE_VAR_FREE
переменная подлежит удалению
Definition: s4g_types.h:52
const char * getVarName(s4g_Variable *pVar, char *szName=0)
в szName запишет имя переменной по ее указателю (поиск перебором), в ppOwner запишет владельца ...
Definition: s4g_gc.cpp:473
s4g_Variable * createVarString(const char *szString, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением szString.
Definition: s4g_gc.cpp:361
void clear()
очистка всех данных (кроме внутренних констант)
Definition: s4g_gc.cpp:95
ID m_idConstContext
идентификатор константного контекста
Definition: s4g_gc.h:311
s4g_Variable * createVarCfunc(s4g_c_function func, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением С++ функция
Definition: s4g_gc.cpp:403
void deleteData(s4g_Data *pData)
удаления значения
Definition: s4g_gc.cpp:667
ID m_idVarFALSE
id false переменной в массиве переменных
Definition: s4g_gc.h:260
ID addContext(s4g_Table *pTable, S4G_CONTEXT_TYPE_WORK typeWork=S4G_CONTEXT_TYPE_WORK_ONLINE)
добавить контекст основанный на таблице, возвращает id добавленного контекста, используется для замык...
Definition: s4g_gc.cpp:962
String * getStr2(s4g_Variable *pVar)
возвращает приведенное значение переменной к указателю на класс строки, изменение которого приведет к...
Definition: s4g_gc.cpp:576
MemAlloc< s4g_Class, S4G_RESERVE_CLASS_MEM > m_oMemClass
резервация памяти для классов
Definition: s4g_gc.h:304
s4g_Data * createDataCopy(s4g_Data *pDataSrc, int typeData=S4G_GC_TYPE_DATA_FREE)
создание значения на основании уже существующего значения, по сути копия, ссылка нулевая ...
Definition: s4g_gc.cpp:210
S4G_CONTEXT_TYPE_WORK
типы контекстов
Definition: s4g_types.h:378
s4g_Variable * getVarNull()
возвращает уже созданную переменную с null значением
Definition: s4g_gc.cpp:269
s4g_Variable * createVarInt(s4g_int num, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением num.
Definition: s4g_gc.cpp:306
int getMemCountBusy()
возращает количество занятой памяти в байтах
Definition: s4g_gc.cpp:1059
ID m_idVarNULL
id null переменной в массиве переменных
Definition: s4g_gc.h:258
#define S4G_ADD_MEM_CONTEXTS
количество создаваемых контекстов на каждый случай нехватки
Definition: s4g.h:222
s4g_Data * createDataFloat(s4g_float num, int typeData=S4G_GC_TYPE_DATA_FREE)
создать float со значением num.
Definition: s4g_gc.cpp:243
void assign(s4g_Variable *pVarDest, s4g_Variable *pVarSrc)
присвоить в pVarDest данные из pVarSrc.
Definition: s4g_gc.cpp:445
s4g_OwnerVar * getContextOwner(ID id)
возвращает указатель на s4g_OwnerVar контекста по id.
Definition: s4g_gc.cpp:655
MemAlloc< String, S4G_RESERVE_STRING_MEM > m_oMemString
резервация памяти для строк
Definition: s4g_gc.h:292
int(* s4g_c_function)(s4g_Main *s4gm)
тип си(++) функции
Definition: s4g.h:289
Сборщик мусора
Definition: s4g_gc.h:32
ID m_idDataTRUE
id true переменной в массиве данных
Definition: s4g_gc.h:263
ID existsInAccessibleContexts(const char *szName, s4g_Variable **ppVar)
существует ли переменная с именем szName во всех доступных контекстах, если да то возвращает id конте...
Definition: s4g_gc.cpp:1033
s4g_bool getBool(s4g_Variable *pVar)
возвращает приведенное значение переменной к bool.
Definition: s4g_gc.cpp:611
s4g_Variable * createVarTable(s4g_Table *pTable, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением уже существующей таблицы
Definition: s4g_gc.cpp:373
ID m_idDataFALSE
id false переменной в массиве данных
Definition: s4g_gc.h:264
рабочий
Definition: s4g_types.h:381
s4g_Data * createDataInt(s4g_int num, int typeData=S4G_GC_TYPE_DATA_FREE)
создать int со значением num.
Definition: s4g_gc.cpp:221
s4g_Variable * getFromConstContext(const char *szName)
получить переменную из константного контекста
Definition: s4g_gc.cpp:930
s4g_Array * getArray(s4g_Variable *pVar)
возвращает приведенное значение переменной к array.
Definition: s4g_gc.cpp:590
void addConstContext()
добавить константный(всегда доступный) контекст, используется для бибилиотек языка ...
Definition: s4g_gc.cpp:904
ID createContext(s4g_Table **ppTable, S4G_CONTEXT_TYPE_WORK typeWork=S4G_CONTEXT_TYPE_WORK_ONLINE)
создать и добавить новый контекст, возвращает id контекста, а в ppTable записывает указатель на табли...
Definition: s4g_gc.cpp:942
short int s4g_bool
bool
Definition: s4g.h:279
s4g_Table * m_pGtable
глобальное пространство имен _g.
Definition: s4g_gc.h:266
s4g_Variable * createVarBool(s4g_bool bf, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением bf.
Definition: s4g_gc.cpp:336
MemAlloc< s4g_Table, S4G_RESERVE_TABLE_MEM > m_oMemTable
резервация памяти для таблиц
Definition: s4g_gc.h:298
ID m_idFixedData
последний ключ в таблице с данными + 1 (для того чтобы не анализиировать константные данные при сборк...
Definition: s4g_gc.h:314
s4g_Variable * createVarTableEmpty(int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением "пустая таблица".
Definition: s4g_gc.cpp:283
void fixationConstVarData()
фиксация конечной позиции констант (окончание загрузки скрипта)
Definition: s4g_gc.cpp:883
ID m_idVarTRUE
id true переменной в массиве переменных
Definition: s4g_gc.h:259
MemAlloc< s4g_Data, S4G_RESERVE_DATA_MEM > m_oMemData
резервация памяти для данных
Definition: s4g_gc.h:286
s4g_Table * getGtable()
возвращает таблицу глобального пространства имен
Definition: s4g_gc.h:48
основа взаимодествия
Definition: s4g_main.h:45
массив переменной длины
Definition: s4g_types.h:221
ID m_idDataNULL
id null переменной в массиве данных
Definition: s4g_gc.h:262
S4G_TYPE getType(s4g_Variable *pVar)
получить тип переменной
Definition: s4g_gc.cpp:647
s4g_Class * getClass(s4g_Variable *pVar)
возвращает приведенное значение переменной к class.
Definition: s4g_gc.cpp:625
int getMemCountAllocated()
возращает количество выделенной (в том числе и зарезервированной) памяти в байтах ...
Definition: s4g_gc.cpp:1085
переменная
Definition: s4g_types.h:101
s4g_uint getUint(s4g_Variable *pVar)
возвращает приведенное значение переменной к uint.
Definition: s4g_gc.cpp:555
ID m_idFixedVars
последний ключ в таблице со значениями + 1 (для того чтобы не анализиировать константные значения при...
Definition: s4g_gc.h:317
s4g_Variable * getVarFromContextByNum(ID idRelativeTopContext, ID idVar)
получить переменную по idVar из контекста, которые расположен на top - idRelativeTopContext позиции о...
Definition: s4g_gc.cpp:1047
s4g_Stack< s4g_Context *, S4G_RESERVE_CONTEXTS > m_aCurrContexts
массив подключенных в данный момент контекстов
Definition: s4g_gc.h:277
MemAlloc< s4g_Sfunction, S4G_RESERVE_SFUNC_MEM > m_oMemSFunc
резервация памяти для скриптовых функций
Definition: s4g_gc.h:295
s4g_OwnerVar * getDataOwner(ID id)
возвращает указатель на s4g_OwnerVar значения по id.
Definition: s4g_gc.cpp:660
unsigned long s4g_uint
uint
Definition: s4g.h:273
s4g_Variable * createVarClassObjectEmpty(s4g_Variable *pVarClass, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением объект класса
Definition: s4g_gc.cpp:431
Заголовочный файл с основными типами данных
мета класс
Definition: s4g_types.h:262
s4g_Variable * createVarFloat(s4g_float num, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением num.
Definition: s4g_gc.cpp:326
int m_iCountCurrContexts
текущий размер массива контекстов
Definition: s4g_gc.h:280
s4g_Variable * getVarBool(bool bf)
возвращает уже созданную переменную с bool значением
Definition: s4g_gc.cpp:466
void allocMemContexts(int iCount=S4G_ADD_MEM_CONTEXTS)
выделить дополнительную память для контекстов
Definition: s4g_gc.cpp:891
значение
Definition: s4g_types.h:76
s4g_int getInt(s4g_Variable *pVar)
возвращает приведенное значение переменной к int.
Definition: s4g_gc.cpp:548
bool add2ConstContext(const char *szName, s4g_Variable *pVar)
добавить в константный контекст переменную и установить ей имя
Definition: s4g_gc.cpp:918
float s4g_float
float
Definition: s4g.h:276
s4g_Variable * createVarPdata(s4g_pdata pdata, int typeData=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением pdata.
Definition: s4g_gc.cpp:274
s4g_Variable * createVarSfunc(s4g_Sfunction *func, int typeVar=S4G_GC_TYPE_VAR_FREE)
создать переменную со значением уже существующей скриптовой функции
Definition: s4g_gc.cpp:394
void activatePrev(ID idLastContext)
активирует предыдущие контексты до idLastContext (это значение было получено при вызове deactivatePre...
Definition: s4g_gc.cpp:993
объект класса
Definition: s4g_types.h:317
s4g_Variable * createVarUint(s4g_uint num, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением num.
Definition: s4g_gc.cpp:316
void deleteTopContext(bool canClear)
пометить контекст как ненужный и при сборке мусора снести все с него
Definition: s4g_gc.cpp:1014
s4g_Variable * createVarClassEmpty(const char *szName, int typeVar=S4G_GC_TYPE_VAR_FREE, int typeData=S4G_GC_TYPE_DATA_FREE)
создать переменную со значением класса
Definition: s4g_gc.cpp:412
s4g_Sfunction * getSfunc(s4g_Variable *pVar)
возвращает приведенное значение переменной к скриптовой функции
Definition: s4g_gc.cpp:597