diff options
author | Aleksey Kladov <[email protected]> | 2018-07-30 00:23:01 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-07-30 00:23:07 +0100 |
commit | 4e79073e3872df718eb189dd5301ffc000f87d58 (patch) | |
tree | ee8b6fd71aeb6d3ed1f4c1c686e5753fdf72e62a /src/yellow/mod.rs | |
parent | b87291a8a46025fa9b709cd9860483528308735f (diff) |
Use raw pointers
Diffstat (limited to 'src/yellow/mod.rs')
-rw-r--r-- | src/yellow/mod.rs | 31 |
1 files changed, 0 insertions, 31 deletions
diff --git a/src/yellow/mod.rs b/src/yellow/mod.rs index 9a6203cc1..4fd0d24d7 100644 --- a/src/yellow/mod.rs +++ b/src/yellow/mod.rs | |||
@@ -3,10 +3,6 @@ mod red; | |||
3 | mod syntax; | 3 | mod syntax; |
4 | mod builder; | 4 | mod builder; |
5 | 5 | ||
6 | use std::{ | ||
7 | sync::{Arc, Weak}, | ||
8 | mem | ||
9 | }; | ||
10 | pub(crate) use self::{ | 6 | pub(crate) use self::{ |
11 | green::{GreenNode, GreenNodeBuilder}, | 7 | green::{GreenNode, GreenNodeBuilder}, |
12 | red::RedNode, | 8 | red::RedNode, |
@@ -14,30 +10,3 @@ pub(crate) use self::{ | |||
14 | builder::GreenBuilder, | 10 | builder::GreenBuilder, |
15 | }; | 11 | }; |
16 | pub use self::syntax::SyntaxNode; | 12 | pub use self::syntax::SyntaxNode; |
17 | |||
18 | // This could be just `*const T`, but we use `Weak` for additional checks | ||
19 | #[derive(Debug)] | ||
20 | pub(crate) struct Ptr<T>(Weak<T>); | ||
21 | |||
22 | impl<T> Clone for Ptr<T> { | ||
23 | fn clone(&self) -> Self { | ||
24 | Ptr(self.0.clone()) | ||
25 | } | ||
26 | } | ||
27 | |||
28 | impl<T> Ptr<T> { | ||
29 | fn clone(self_: &Ptr<T>) -> Ptr<T> { | ||
30 | Ptr(Weak::clone(&self_.0)) | ||
31 | } | ||
32 | |||
33 | fn new(arc: &Arc<T>) -> Ptr<T> { | ||
34 | Ptr(Arc::downgrade(arc)) | ||
35 | } | ||
36 | |||
37 | unsafe fn get(&self) -> &T { | ||
38 | let t = self.0.upgrade() | ||
39 | .expect("caller must guarantee that Ptr is not null"); | ||
40 | let t: &T = &*t; | ||
41 | mem::transmute(t) | ||
42 | } | ||
43 | } | ||