memory.inc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #if defined __MEMORY_INCLUDED__
  2. #endinput
  3. #endif
  4. #define __MEMORY_INCLUDED__
  5. #define MEM_NULLPTR (Pointer:0)
  6. #define MEM_NULLUMPTR (UnmanagedPointer:0)
  7. #define MEM_NULLFEPTR (ForeignPointer:0)
  8. #define AnyPointer {UnmanagedPointer, ForeignPointer, Pointer}
  9. #define MEM_struct enum _:
  10. #define MEM_SIZEOF_CELL (4)
  11. #define MEM_foreach_ex%2(%0,%1:%2) for (new %1 = MEM_get_size(%2), %0; (%0) < (%1); %0++)
  12. #define MEM_foreach_rev_ex%2(%0,%1:%2) for (new %1 = MEM_get_size(%2), %0 = (%1) - 1; (%0) >= 0; %0--)
  13. #define MEM_foreach%2(%0:%1) MEM_foreach_ex%2(%0,__size__:%1)
  14. #define MEM_foreach_rev%2(%0:%1) MEM_foreach_rev_ex%2(%0,__size__:%1)
  15. #define MEM_MACR_comp_ptr%2(%0,%1) (ForeignPointer:(%0) + ForeignPointer:((%1) * MEM_MACR_SIZEOF_CELL))
  16. #define MEM_MACR_increment_ptr%1(%0) (ForeignPointer:(%0 += MEM_MACR_SIZEOF_CELL))
  17. #define MEM_MACR_decrement_ptr%1(%0) (ForeignPointer:(%0 -= MEM_MACR_SIZEOF_CELL))
  18. // Memory result enumerator
  19. enum EMemoryResult
  20. {
  21. // OK
  22. EMemoryResult_OK,
  23. // Invalid size
  24. EMemoryResult_InvalidSize,
  25. // Invalid pointer
  26. EMemoryResult_InvalidPointer,
  27. // Invalid index
  28. EMemoryResult_InvalidIndex,
  29. // Invalid index size
  30. EMemoryResult_InvalidIndexSize,
  31. // Out of memory
  32. EMemoryResult_OutOfMemory
  33. }
  34. // Allocate new memory. Delete with `MEM_delete`
  35. native Pointer:MEM_new(cells = 1);
  36. // Allocate new zeroed memory. Delete with `MEM_delete`
  37. native Pointer:MEM_new_zero(cells = 1);
  38. // Allocate new value. Delete with `MEM_delete`
  39. native Pointer:MEM_new_val(value);
  40. // Allocate new array. Delete with `MEM_delete`
  41. native Pointer:MEM_new_arr(const arr[], arr_size = sizeof arr);
  42. // Clone memory. Delete with `MEM_delete`
  43. native Pointer:MEM_clone(Pointer:pointer);
  44. // Delete allocated memory
  45. native MEM_delete(Pointer:pointer);
  46. // Is valid pointer
  47. native bool:MEM_is_valid_ptr(Pointer:pointer);
  48. // Get size
  49. native MEM_get_size(Pointer:pointer);
  50. // Get value
  51. native MEM_get_val(Pointer:pointer, index = 0);
  52. // Get array
  53. native ForeignPointer:MEM_get_arr(Pointer:pointer, index = 0, arr[], arr_size = sizeof arr);
  54. // Set value
  55. native MEM_set_val(Pointer:pointer, index = 0, value);
  56. // Set array
  57. native ForeignPointer:MEM_set_arr(Pointer:pointer, index = 0, const arr[], arr_size = sizeof arr);
  58. // Copy memory
  59. native Pointer:MEM_copy(Pointer:dest, Pointer:src, size, dest_index = 0, src_index = 0);
  60. // Zero memory
  61. native Pointer:MEM_zero(Pointer:pointer, size, index = 0);
  62. // Get last result
  63. native EMemoryResult:MEM_get_last_result();
  64. // Allocate new unmanaged memory. Delete with `MEM_UM_delete`
  65. native UnmanagedPointer:MEM_UM_new(cells = 1);
  66. // Allocate new zeroed unmanaged memory. Delete with `MEM_UM_delete`
  67. native UnmanagedPointer:MEM_UM_new_zero(cells = 1);
  68. // Allocate new unmanaged value. Delete with `MEM_UM_delete`
  69. native UnmanagedPointer:MEM_UM_new_val(value);
  70. // Allocate new unmanaged array. Delete with `MEM_UM_delete`
  71. native UnmanagedPointer:MEM_UM_new_arr(const arr[], arr_size = sizeof arr);
  72. // Clone unmanaged memory. Delete with `MEM_UM_delete`
  73. native UnmanagedPointer:MEM_UM_clone(AnyPointer:pointer, index = 0, cells);
  74. // Delete unmanaged memory
  75. native MEM_UM_delete(UnmanagedPointer:pointer);
  76. // Get unmanaged value
  77. native MEM_UM_get_val(AnyPointer:pointer, index = 0);
  78. // Get unmanaged array
  79. native ForeignPointer:MEM_UM_get_arr(AnyPointer:pointer, index = 0, arr[], arr_size = sizeof arr);
  80. // Set unmanaged value
  81. native MEM_UM_set_val(UnmanagedPointer:pointer, index = 0, value);
  82. // Set unmanaged array
  83. native ForeignPointer:MEM_UM_set_arr(UnmanagedPointer:pointer, index = 0, const arr[], arr_size = sizeof arr);
  84. // Copy unmanaged memory
  85. native UnmanagedPointer:MEM_UM_copy(UnmanagedPointer:dest, AnyPointer:src, size, dest_index = 0, src_index = 0);
  86. // Zero unmanaged memory
  87. native UnmanagedPointer:MEM_UM_zero(UnmanagedPointer:pointer, size, index = 0);
  88. // Get pointer of variable
  89. native ForeignPointer:MEM_UM_get_addr(&var);
  90. // Get AMX pointer
  91. native ForeignPointer:MEM_UM_get_amx_ptr();