using concurrent::AtomicIntusing concurrent::AtomicRef** (Service) - Holds a list of all the services defined by this IoC.** ** @since 1.2.0constmixin ServiceStats {** Returns service stats, keyed by service id.abstract Str:ServiceStat stats()}** @since 1.2.0internalconstclass ServiceStatsImpl : ServiceStats {privateconst ObjLocator objLocatornew make(Registry registry){this.objLocator = (ObjLocator) registry}override Str:ServiceStat stats(){ objLocator.stats}}** As returned by `ServiceStats`. Defines some basic statistics for a service.** ** @since 1.2.0constclass ServiceStat {privateconst AtomicRef atomLifecycle := AtomicRef()privateconst AtomicInt atomNoOfImpls := AtomicInt()const Str serviceIdconst Type serviceTypeconst ServiceScope scopeconst Bool proxyDisabled ServiceLifecycle lifecycle { get { atomLifecycle.val }internal set { atomLifecycle.val = it}} Int noOfImpls { get { atomNoOfImpls.val }internal set { atomNoOfImpls.val = it}} @NoDoc @Deprecated { msg="Use 'serviceType' instead."} Type type(){ serviceType }internalnew make(|This| f){ f(this)}internal Void incImpls(){ atomNoOfImpls.incrementAndGet}internal Void updateLifecycle(ServiceLifecycle newLifecycle){if(newLifecycle > lifecycle) lifecycle = newLifecycle}}** Used by `ServiceStat` to define the lifecycle state of a service** ** @since 1.2.0enum class ServiceLifecycle {** The service is defined in a module, but has not yet been referenced. DEFINED,** A proxy has been created for the service, but the implementation itself no methods of the proxy have been invoked. VIRTUAL,** A service implementation for the service has been created. It is real! CREATED,// leave this last for compare** Builtin services exist before the `Registry` is constructed. BUILTIN;}