aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/Lifecycle.ml
diff options
context:
space:
mode:
authorEstevan Castilho <tevo@riajuu.net>2026-08-22 23:22:45 +0000
committerEstevan Castilho <tevo@riajuu.net>2026-08-23 03:07:01 +0000
commit11e41f1179f870d25ed6621d488a8dca2d7005c2 (patch)
tree4faa768ea7961ecdfd8fb991d55d41f85677a15d /lib/kernel/Lifecycle.ml
parent9ef2323823c8fea8cfb53e9c011433daeb7ec66f (diff)
downloadRNT-11e41f1179f870d25ed6621d488a8dca2d7005c2.tar.gz
RNT-11e41f1179f870d25ed6621d488a8dca2d7005c2.zip
Lifecycles and namespaces
Diffstat (limited to '')
-rw-r--r--lib/kernel/Lifecycle.ml29
-rw-r--r--lib/kernel/Lifecycle.mli12
2 files changed, 41 insertions, 0 deletions
diff --git a/lib/kernel/Lifecycle.ml b/lib/kernel/Lifecycle.ml
new file mode 100644
index 0000000..ff67ecf
--- /dev/null
+++ b/lib/kernel/Lifecycle.ml
@@ -0,0 +1,29 @@
+class type lifecycle = object
+ method reference : bool
+ method release : unit
+end
+
+class type virtual controlled_lifecycle = object
+ inherit lifecycle
+ method virtual destroy : unit
+end
+
+class null = object
+ method reference = true
+ method release = ()
+end
+
+class virtual counted = object (self)
+ val references = Atomic.make 1
+
+ method virtual destroy : unit
+
+ method reference =
+ Atomic.incr references;
+ true
+
+ method release =
+ Atomic.decr references;
+ if Atomic.get references <= 0 then
+ self#destroy
+end
diff --git a/lib/kernel/Lifecycle.mli b/lib/kernel/Lifecycle.mli
new file mode 100644
index 0000000..f110768
--- /dev/null
+++ b/lib/kernel/Lifecycle.mli
@@ -0,0 +1,12 @@
+class type lifecycle = object
+ method reference : bool
+ method release : unit
+end
+
+class type virtual controlled_lifecycle = object
+ inherit lifecycle
+ method virtual destroy : unit
+end
+
+class null : lifecycle
+class virtual counted : controlled_lifecycle