diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-08-14 20:44:26 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-08-14 20:44:26 +0300 |
| commit | 2023a7b2d9656f80b00de81453348c0a66f200f7 (patch) | |
| tree | 06e4ea293318955cc4cf620428d04f1708c17364 /examples/arc.ct | |
| parent | 1a56a881bc2c37614cfd074e7b986211c6d04809 (diff) | |
| download | ek-2023a7b2d9656f80b00de81453348c0a66f200f7.tar.gz ek-2023a7b2d9656f80b00de81453348c0a66f200f7.zip | |
test cleanup
+ Somewhat poor Git hygiene but I also fixed some bugs while I was at
it.
Diffstat (limited to 'examples/arc.ct')
| -rw-r--r-- | examples/arc.ct | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/examples/arc.ct b/examples/arc.ct deleted file mode 100644 index 8869b42..0000000 --- a/examples/arc.ct +++ /dev/null @@ -1,53 +0,0 @@ -/* could be non-null instead of raw pointer? */ -typedef atomic_rc [t any] { - count *usize; - data *t; -} - -/* macros must be 'called' with () */ -pub define arc(t) { struct (atomic_rc[t]) }; - -pub dereference(a *arc) *#a.data -{ - return a.t; -} - -pub init(mut a *arc, e #a.data) -{ - new(a.count, 0); - a.data = e; -} - -pub init(mut a *arc, b *arc<#a.data>) -{ - copy(a, b); -} - -pub deinit(mut a *arc) -{ - if atomic_fetch_add(a.count, -1) == 1 { - dealloc(a.data); - dealloc(a.count); - } - - a.count = null; - a.data = null; -} - -pub copy(mut a *arc, b *arc<#a.data>) -{ - deinit(a); - a.count = b.count; - a.data = b.data; - atomic_fetch_add(b.count, 1); -} - -pub move(mut a *arc, mut b *arc<#a.data>) -{ - deinit(a); - a.count = b.count; - a.data = b.data; - /* reference count stays the same */ - b.count = null; - a.count = null; -} |
