diff options
Diffstat (limited to '')
| -rw-r--r-- | lib/kernel/Lifecycle.ml | 52 |
1 files changed, 22 insertions, 30 deletions
diff --git a/lib/kernel/Lifecycle.ml b/lib/kernel/Lifecycle.ml index 772cb6e..bf0b544 100644 --- a/lib/kernel/Lifecycle.ml +++ b/lib/kernel/Lifecycle.ml @@ -8,33 +8,25 @@ class type virtual controlled_lifecycle = object 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 = - if Atomic.fetch_and_add references (-1) = 1 then - self#destroy -end - -class retaining inner (owner : lifecycle) = object - inherit counted - initializer ignore owner#reference - - method destroy = - Protocols.Handle.release inner; - owner#release - - method hash = Protocols.Handle.hash inner - method protocols = Protocols.Handle.protocols inner -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 = if Atomic.fetch_and_add references (-1) = 1 then self#destroy + end + +class retaining inner (owner : lifecycle) = + object + inherit counted + initializer ignore owner#reference + method destroy = Protocols.Handle.release inner; owner#release + method hash = Protocols.Handle.hash inner + method protocols = Protocols.Handle.protocols inner + end |
