Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- matevm_itype_stack = class
- private
- // Указатель на начало стека.
- __stack: Pointer;
- // Размер стека в байтах.
- __stack_size: matevm_btype_int;
- // Указатель на вершину стека.
- __stack_track: Pointer;
- <...>
- public
- <...>
- constructor create(size: matevm_btype_int);
- destructor destroy;
- function pop<generic_type>: generic_type;
- procedure push<generic_type>(value: generic_type);
- end;
- constructor matevm_itype_stack.create(size: matevm_btype_int);
- begin
- __stack_size := size;
- __stack := GetMemory(__stack_size);
- __stack_track := __stack;
- end;
- destructor matevm_itype_stack.destroy;
- begin
- FreeMemory(__stack);
- end;
- function matevm_itype_stack.pop<generic_type>: generic_type;
- begin
- __stack_track := Pointer(matevm_btype_uint(__stack_track) - SizeOf(generic_type));
- Move(__stack_track^, Result, SizeOf(generic_type));
- end;
- procedure matevm_itype_stack.push<generic_type>(value: generic_type);
- begin
- Move(value, __stack_track^, SizeOf(generic_type));
- __stack_track := Pointer(matevm_btype_uint(__stack_track) + SizeOf(generic_type));
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement