MCPcopy Create free account
hub / github.com/OGSR/OGSR-Engine / smart_alloc

Method smart_alloc

ogsr_engine/xrGame/script_vars_storage.cpp:47–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45}
46
47void* SCRIPT_VAR::smart_alloc(int new_type, u32 cb) // схема автоматического выделения памяти
48{
49 // autodetect embedded var-size
50 switch (new_type & 0xffff)
51 {
52 case LUA_TBOOLEAN: cb = sizeof(b_value); break;
53 case LUA_TNUMBER: cb = sizeof(n_value); break;
54 }
55
56 size = cb;
57
58 if (type & SVT_ALLOCATED) // если старая переменная была аллоцирована в памяти
59 {
60 if (size > SMALL_VAR_SIZE)
61 data = xr_realloc(data, size);
62 else
63 xr_free(data);
64 }
65 else
66 {
67 if (size > SMALL_VAR_SIZE)
68 data = xr_malloc(size);
69 }
70
71 if (size > SMALL_VAR_SIZE)
72 {
73 type = new_type | SVT_ALLOCATED;
74 return data;
75 }
76 else
77 {
78 type = new_type;
79 return &s_value;
80 }
81}
82
83CScriptVarsTable::~CScriptVarsTable() { clear(); }
84

Callers 1

setMethod · 0.80

Calls 3

xr_reallocFunction · 0.85
xr_freeFunction · 0.85
xr_mallocFunction · 0.85

Tested by

no test coverage detected