| ... | ... | @@ -5,15 +5,15 @@ const debug_mode = @import("builtin").mode == .Debug; |
| 5 | 5 | pub const MemoryPoolError = error{OutOfMemory}; |
| 6 | 6 | |
| 7 | 7 | /// A memory pool that can allocate objects of a single type very quickly. |
| 8 | | /// Use this instead of a general purpose allocator when you need to allocate a lot of objects |
| 9 | | /// of the same type, as a memory pool outperforms general purpose allocators. |
| 8 | /// Use this when you need to allocate a lot of objects of the same type, |
| 9 | /// because It outperforms general purpose allocators. |
| 10 | 10 | pub fn MemoryPool(comptime Item: type) type { |
| 11 | 11 | return MemoryPoolAligned(Item, @alignOf(Item)); |
| 12 | 12 | } |
| 13 | 13 | |
| 14 | 14 | /// A memory pool that can allocate objects of a single type very quickly. |
| 15 | | /// Use this instead of a general purpose allocator when you need to allocate a lot of objects |
| 16 | | /// of the same type, as a memory pool outperforms general purpose allocators. |
| 15 | /// Use this when you need to allocate a lot of objects of the same type, |
| 16 | /// because It outperforms general purpose allocators. |
| 17 | 17 | pub fn MemoryPoolAligned(comptime Item: type, comptime alignment: u29) type { |
| 18 | 18 | if (@alignOf(Item) == alignment) { |
| 19 | 19 | return MemoryPoolExtra(Item, .{}); |
| ... | ... | @@ -32,20 +32,18 @@ pub const Options = struct { |
| 32 | 32 | }; |
| 33 | 33 | |
| 34 | 34 | /// A memory pool that can allocate objects of a single type very quickly. |
| 35 | | /// Use this instead of a general purpose allocator when you need to allocate a lot of objects |
| 36 | | /// of the same type, as a memory pool outperforms general purpose allocators. |
| 35 | /// Use this when you need to allocate a lot of objects of the same type, |
| 36 | /// because It outperforms general purpose allocators. |
| 37 | 37 | pub fn MemoryPoolExtra(comptime Item: type, comptime pool_options: Options) type { |
| 38 | 38 | return struct { |
| 39 | 39 | const Pool = @This(); |
| 40 | 40 | |
| 41 | | /// Size of the memory pool items. This is not necessarily |
| 42 | | /// the same as `@sizeOf(Item)` as the pool also uses the items for internal |
| 43 | | /// means. |
| 41 | /// Size of the memory pool items. This is not necessarily the same |
| 42 | /// as `@sizeOf(Item)` as the pool also uses the items for internal means. |
| 44 | 43 | pub const item_size = std.math.max(@sizeOf(Node), @sizeOf(Item)); |
| 45 | 44 | |
| 46 | | /// Alignment of the memory pool items. This is not necessarily |
| 47 | | /// the same as `@alignOf(Item)` as the pool also uses the items for internal |
| 48 | | /// means. |
| 45 | /// Alignment of the memory pool items. This is not necessarily the same |
| 46 | /// as `@alignOf(Item)` as the pool also uses the items for internal means. |
| 49 | 47 | pub const item_alignment = std.math.max(@alignOf(Node), pool_options.alignment orelse 0); |
| 50 | 48 | |
| 51 | 49 | const Node = struct { |