Field pool
This commit is contained in:
parent
60622ccca5
commit
ff32ac6227
15 changed files with 121 additions and 6001 deletions
41
libraries/pool/pool.odin
Normal file
41
libraries/pool/pool.odin
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package adb_pool
|
||||
|
||||
Pool :: struct($T: typeid) {
|
||||
pool: []T,
|
||||
usage, capacity: int,
|
||||
}
|
||||
|
||||
init :: proc(pool: ^Pool($T), capacity: int, allocator := context.allocator) {
|
||||
pool.pool = make([]T, capacity, allocator)
|
||||
pool.usage = 0
|
||||
pool.capacity = capacity
|
||||
}
|
||||
|
||||
elems_available :: proc(pool: ^Pool($T), capacity: int) -> bool {
|
||||
return pool.usage + count <= pool.capacity
|
||||
}
|
||||
|
||||
get :: proc(pool: ^Pool($T), count: int) -> []T {
|
||||
elements := pool.pool[pool.usage:pool.usage + count]
|
||||
pool.usage += count
|
||||
return elements
|
||||
}
|
||||
|
||||
usage :: proc(pool: Pool($T)) -> int {
|
||||
return pool.usage
|
||||
}
|
||||
|
||||
get_allocated_elems :: proc(pool: Pool($T)) -> []T {
|
||||
return pool.pool[:pool.usage]
|
||||
}
|
||||
|
||||
clear :: proc(pool: ^Pool($T)) {
|
||||
pool.usage = 0
|
||||
}
|
||||
|
||||
free_range :: proc(pool: ^Pool($T), from, count: int) {
|
||||
assert(count > 0, "Cannot free zero or negative count")
|
||||
to := from + count
|
||||
assert(to < pool.usage, "Cannot free beyond usage")
|
||||
mem.copy(&pool.pool[from], &pool.pool[to], (pool.usage - to) * size_of(T))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue