summaryrefslogtreecommitdiff
path: root/oryxc/src/arena.rs
diff options
context:
space:
mode:
Diffstat (limited to 'oryxc/src/arena.rs')
-rw-r--r--oryxc/src/arena.rs73
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;
+ }
}
}