| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,4 +1,6 @@ | |||
| 1 | - use std::collections::HashSet; | ||
| 1 | + use std::collections::HashMap; | ||
| 2 | + use std::sync::Mutex; | ||
| 3 | + use std::sync::atomic::{AtomicUsize, Ordering}; | ||
| 2 | 4 | ||
| 3 | 5 | #[derive(Debug)] | |
| 4 | 6 | #[derive(Clone)] | |
@@ -41,29 +43,34 @@ pub struct Object { | |||
| 41 | 43 | } | |
| 42 | 44 | ||
| 43 | 45 | #[derive(Debug)] | |
| 46 | + #[derive(Hash)] | ||
| 44 | 47 | #[derive(Clone)] | |
| 48 | + #[derive(Eq)] | ||
| 49 | + #[derive(PartialEq)] | ||
| 45 | 50 | pub struct ObjectRef { | |
| 46 | - index: usize, | ||
| 51 | + id: usize, | ||
| 47 | 52 | } | |
| 48 | 53 | ||
| 54 | + static current_ref_id: AtomicUsize = ::std::sync::atomic::ATOMIC_USIZE_INIT; | ||
| 55 | + | ||
| 49 | 56 | #[derive(Debug)] | |
| 50 | 57 | pub struct ObjectStore { | |
| 51 | - all_objects: Vec<Object>, | ||
| 58 | + all_objects: HashMap<ObjectRef, Object>, | ||
| 52 | 59 | } | |
| 53 | 60 | ||
| 54 | 61 | impl ObjectStore { | |
| 55 | 62 | pub fn new() -> ObjectStore { | |
| 56 | - ObjectStore { all_objects: Vec::new() } | ||
| 63 | + ObjectStore { all_objects: HashMap::new() } | ||
| 57 | 64 | } | |
| 58 | 65 | ||
| 59 | 66 | pub fn allocate(&mut self, obj: ObjectContent) -> ObjectRef { | |
| 60 | - let obj_ref = ObjectRef { index: self.all_objects.len() }; | ||
| 61 | - self.all_objects.push(Object { content: obj }); | ||
| 67 | + let obj_ref = ObjectRef { id: current_ref_id.fetch_add(1, Ordering::SeqCst) }; | ||
| 68 | + self.all_objects.insert(obj_ref.clone(), Object { content: obj }); | ||
| 62 | 69 | obj_ref | |
| 63 | 70 | } | |
| 64 | 71 | ||
| 65 | 72 | pub fn deref(&self, obj_ref: &ObjectRef) -> &Object { | |
| 66 | 73 | // TODO: check the reference is valid | |
| 67 | - self.all_objects.get(obj_ref.index).unwrap() | ||
| 74 | + self.all_objects.get(obj_ref).unwrap() | ||
| 68 | 75 | } | |
| 69 | 76 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments