diff options
Diffstat (limited to 'oryxc/src/arena.rs')
| -rw-r--r-- | oryxc/src/arena.rs | 73 |
1 files changed, 38 insertions, 35 deletions
diff --git a/oryxc/src/arena.rs b/oryxc/src/arena.rs index 2268c9b..34a48cb 100644 --- a/oryxc/src/arena.rs +++ b/oryxc/src/arena.rs @@ -31,10 +31,10 @@ pub struct GlobalArena { impl GlobalArena { pub fn new(blksz: usize) -> Self { - Self { + return Self { blksz, blocks: Mutex::new(Vec::new()), - } + }; } fn allocate_block(&self, layout: Layout) -> RawBlock { @@ -179,7 +179,7 @@ impl<'a> LocalArena<'a> { return unsafe { slice::from_raw_parts_mut(ptr, len) }; } - fn mark(&self) -> Mark { + pub fn mark(&self) -> Mark { return Mark { blk: self.curblk.get(), beg: self.beg.get(), @@ -187,7 +187,7 @@ impl<'a> LocalArena<'a> { }; } - fn restore(&self, mark: Mark) { + pub fn restore(&self, mark: Mark) { self.curblk.set(mark.blk); self.beg.set(mark.beg); self.end.set(mark.end); @@ -214,44 +214,47 @@ impl<'s, 'a> ScopedArena<'s, 'a> { return self.inner.alloc(value); } - pub fn alloc_slice<T>(&self, len: usize) -> &'a mut [T] { + pub fn alloc_slice<T>(&self, len: usize) -> &'s mut [T] { return self.inner.alloc_slice(len); } } -#[test] -fn test_alloc_slice() { - let arena_global = GlobalArena::new(8); - let arena_local_1 = LocalArena::new(&arena_global); - let arena_local_2 = LocalArena::new(&arena_global); - - let s1 = arena_local_1.alloc_slice(8); - let s2 = arena_local_2.alloc_slice(4); - assert_eq!(s1.len(), 8); - assert_eq!(s2.len(), 4); - - for i in 0..s1.len() { - s1[i] = i; - } - for i in 0..s2.len() { - s2[i] = i; +#[cfg(test)] +mod tests { + #[test] + fn test_alloc_slice() { + let arena_global = GlobalArena::new(8); + let arena_local_1 = LocalArena::new(&arena_global); + let arena_local_2 = LocalArena::new(&arena_global); + + let s1 = arena_local_1.alloc_slice(8); + let s2 = arena_local_2.alloc_slice(4); + assert_eq!(s1.len(), 8); + assert_eq!(s2.len(), 4); + + for i in 0..s1.len() { + s1[i] = i; + } + for i in 0..s2.len() { + s2[i] = i; + } } -} -#[test] -fn test_arena_grows() { - let arena_global = GlobalArena::new(8); - let arena_local = LocalArena::new(&arena_global); + #[test] + fn test_arena_grows() { + let arena_global = GlobalArena::new(8); + let arena_local = LocalArena::new(&arena_global); - let s1 = arena_local.alloc_slice(8); - let s2 = arena_local.alloc_slice(69); - assert_eq!(s1.len(), 8); - assert_eq!(s2.len(), 69); + let s1 = arena_local.alloc_slice(8); + let s2 = arena_local.alloc_slice(69); + assert_eq!(s1.len(), 8); + assert_eq!(s2.len(), 69); - for i in 0..s1.len() { - s1[i] = i; - } - for i in 0..s2.len() { - s2[i] = i; + for i in 0..s1.len() { + s1[i] = i; + } + for i in 0..s2.len() { + s2[i] = i; + } } } |