Advertisement
Guest User

Untitled

a guest
Jul 6th, 2015
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. matevm_itype_stack = class
  2. private
  3. // Указатель на начало стека.
  4. __stack: Pointer;
  5. // Размер стека в байтах.
  6. __stack_size: matevm_btype_int;
  7. // Указатель на вершину стека.
  8. __stack_track: Pointer;
  9. <...>
  10. public
  11. <...>
  12. constructor create(size: matevm_btype_int);
  13. destructor destroy;
  14. function pop<generic_type>: generic_type;
  15. procedure push<generic_type>(value: generic_type);
  16. end;
  17.  
  18. constructor matevm_itype_stack.create(size: matevm_btype_int);
  19. begin
  20. __stack_size := size;
  21. __stack := GetMemory(__stack_size);
  22. __stack_track := __stack;
  23. end;
  24.  
  25. destructor matevm_itype_stack.destroy;
  26. begin
  27. FreeMemory(__stack);
  28. end;
  29.  
  30. function matevm_itype_stack.pop<generic_type>: generic_type;
  31. begin
  32. __stack_track := Pointer(matevm_btype_uint(__stack_track) - SizeOf(generic_type));
  33. Move(__stack_track^, Result, SizeOf(generic_type));
  34. end;
  35.  
  36. procedure matevm_itype_stack.push<generic_type>(value: generic_type);
  37. begin
  38. Move(value, __stack_track^, SizeOf(generic_type));
  39. __stack_track := Pointer(matevm_btype_uint(__stack_track) + SizeOf(generic_type));
  40. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement