diff options
| author | Estevan Castilho <tevo@riajuu.net> | 2026-08-22 23:22:45 +0000 |
|---|---|---|
| committer | Estevan Castilho <tevo@riajuu.net> | 2026-08-23 03:07:01 +0000 |
| commit | 11e41f1179f870d25ed6621d488a8dca2d7005c2 (patch) | |
| tree | 4faa768ea7961ecdfd8fb991d55d41f85677a15d /lib/kernel/Lifecycle.ml | |
| parent | 9ef2323823c8fea8cfb53e9c011433daeb7ec66f (diff) | |
| download | RNT-11e41f1179f870d25ed6621d488a8dca2d7005c2.tar.gz RNT-11e41f1179f870d25ed6621d488a8dca2d7005c2.zip | |
Lifecycles and namespaces
Diffstat (limited to 'lib/kernel/Lifecycle.ml')
| -rw-r--r-- | lib/kernel/Lifecycle.ml | 29 |
1 files changed, 29 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 |
