File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ ]
You can’t perform that action at this time.
0 commit comments