Добавлен Волчачка,
опубликован
Пример кода для более разумного использования памяти структур. Полезность данной функции 15%. Просто попытка урезать выделение памяти для нескольких структур... не для имитации struct. А для массивов..
library StructSaveMemory
globals
integer array StructSize
integer array StructMaxSize
integer array StructBuffer
integer array StructBufferSize
boolean array StructBufferFree
integer StructPointer = -1
integer StructBufferResult = 0
endglobals
function StructBufferRange takes integer Size returns integer
local integer Buffer = 0
local integer BufferEnd = Size
if StructPointer >= 0 then
set Buffer = StructSize[StructPointer]
set BufferEnd = BufferEnd + StructSize[StructPointer]
endif
loop
set StructBufferFree[Buffer] = true
set Buffer = Buffer + 1
exitwhen Buffer == BufferEnd
endloop
set StructSize[StructPointer] = -1
set StructBufferSize[StructPointer] = -1
set StructPointer = StructPointer + 1
set StructMaxSize[StructPointer] = BufferEnd
set Buffer = 0
set BufferEnd = 0
return StructPointer
endfunction
function AllocateBufferStruct takes integer Index returns integer
if StructBufferSize[Index] >= 0 then
set StructBufferResult = StructBuffer[StructBufferSize[Index]]
set StructBufferSize[Index] = StructBufferSize[Index] - 1
else
if StructSize[Index] < StructMaxSize[Index] then
set StructSize[Index] = StructSize[Index] + 1
set StructBufferResult = StructSize[Index]
else
if Index > 0 then
set StructBufferResult = StructMaxSize[Index-1]
else
set StructBufferResult = 0
endif
endif
endif
set StructBufferFree[StructBufferResult] = false
return StructBufferResult - StructMaxSize[Index]
endfunction
function DellocateBufferStruct takes integer Index, integer Element returns nothing
if Index > 0 then
set StructBufferResult = Element-StructMaxSize[Index-1]
else
set StructBufferResult = 0
endif
if not StructBufferFree[StructBufferResult] then
set StructBufferSize[Index] = StructBufferSize[Index] + 1
set StructBuffer[StructBufferSize[Index]] = StructBufferResult
set StructBufferFree[StructBufferResult] = true
endif
endfunction
function BufferStructOld takes integer Index, integer Element returns integer
if Index > 0 then
return Element-StructMaxSize[Index-1]
endif
return Element
endfunction
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
Doc
7 лет назад
2
Бред честно ппц если нужен контроль используйте struct X extends array
Чтобы оставить комментарий, пожалуйста, войдите на сайт.