Skip to content

Commit 9ed0fe9

Browse files
authored
Create chained_arena.hcs
1 parent 8242702 commit 9ed0fe9

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
struct ChainedArena [
2+
blocks: List<List<Int>>,
3+
block_size: Int
4+
]
5+
6+
!! Tworzy nowy lancuch z jednym poczatkowym (pustym) blokiem.
7+
fun chained_arena_new(block_size: Int) -> ChainedArena [
8+
let empty_block = []
9+
let ca = ChainedArena([empty_block], block_size)
10+
end ca
11+
]
12+
13+
!! Alokuje `value`, w razie potrzeby doklejajac nowy blok. Zwraca
14+
!! globalny indeks (liczony przez wszystkie bloki razem).
15+
fun chained_arena_alloc(ca: ChainedArena, value: Int) -> Int [
16+
let last = ca.blocks.len() - 1
17+
if ca.blocks[last].len() >= ca.block_size [
18+
ca.blocks = ca.blocks + [[value]]
19+
end (ca.blocks.len() - 1) * ca.block_size
20+
]
21+
ca.blocks[last].push(value)
22+
end last * ca.block_size + ca.blocks[last].len() - 1
23+
]
24+
25+
!! Zwraca liczbe blokow w lancuchu (rosnie w miare alokacji).
26+
fun chained_arena_block_count(ca: ChainedArena) -> Int [
27+
end ca.blocks.len()
28+
]

0 commit comments

Comments
 (0)