should not need to actually realize the InstanceHandle in order to register a SystemRoutine

This commit is contained in:
Michael Becker 2024-09-01 00:57:20 -04:00
parent cf870659d2
commit 9f0832f5fc
10 changed files with 24 additions and 25 deletions

@ -1 +1 @@
Subproject commit 12ac9ab8c068f850ec7a3850e95562accbe91725
Subproject commit 276a8c031f0b4c7fcc9a349b15bcd08686a2ae06

View File

@ -81,7 +81,6 @@ public class Program : MochaWebApplication
{
// FIXME! : selecting tenant doesn't seem to be working, routes get overwritten / not created
oms.SelectTenant(t_super);
oms.AddLibraryReference(l_System);
InstanceHandle c_Application = oms.GetInstance(KnownInstanceGuids.Classes.Application);
InstanceHandle i_Application = oms.CreateInstanceOf(c_Application, new Guid("{773f6c6e-6cef-4a04-b333-ac097c0ab705}"));

View File

@ -64,13 +64,11 @@ public abstract class Oms
{
InitializeInternal();
if (TryGetInstance(KnownInstanceGuids.SystemAttributeRoutines.GetRuntimeVersion, out InstanceHandle h_RuntimeVersion))
{
RegisterSystemRoutine(h_RuntimeVersion, new SystemAttributeRoutine<string>(h_RuntimeVersion, delegate (Oms oms, OmsContext context)
RegisterSystemRoutine(KnownInstanceGuids.SystemAttributeRoutines.GetRuntimeVersion, new SystemAttributeRoutine<string>(this, KnownInstanceGuids.SystemAttributeRoutines.GetRuntimeVersion, delegate (Oms oms, OmsContext context)
{
return RuntimeVersion.ToString();
}));
}
DebugOms = this;
}
@ -903,15 +901,16 @@ public abstract class Oms
return sb.ToString();
}
public Dictionary<InstanceHandle, SystemRoutine> _systemRoutinesByInstance = new Dictionary<InstanceHandle, SystemRoutine>();
internal void RegisterSystemRoutine(InstanceHandle handle, SystemRoutine routine)
public Dictionary<Guid, SystemRoutine> _systemRoutinesByInstance = new Dictionary<Guid, SystemRoutine>();
internal void RegisterSystemRoutine(Guid globalIdentifier, SystemRoutine routine)
{
_systemRoutinesByInstance[handle] = routine;
_systemRoutinesByInstance[globalIdentifier] = routine;
}
internal object? ExecuteSystemRoutine(OmsContext context, InstanceHandle handle)
{
object? value = _systemRoutinesByInstance[handle].Execute(this, context);
Guid globalIdentifier = this.GetGlobalIdentifier(handle);
object? value = _systemRoutinesByInstance[globalIdentifier].Execute(this, context);
return value;
}

View File

@ -31,24 +31,24 @@ public class OmsSystemRoutineBuilder
{
InstanceHandle handle = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.SystemAttributeRoutine), globalIdentifier);
SystemAttributeRoutine routine = new SystemAttributeRoutine(handle, func);
Oms.RegisterSystemRoutine(handle, routine);
SystemAttributeRoutine routine = new SystemAttributeRoutine(Oms, globalIdentifier, func);
Oms.RegisterSystemRoutine(globalIdentifier, routine);
return routine;
}
public SystemAttributeRoutine<T> CreateSystemAttributeRoutine<T>(Guid globalIdentifier, Func<Oms, OmsContext, T> func)
{
InstanceHandle handle = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.SystemAttributeRoutine), globalIdentifier);
SystemAttributeRoutine<T> routine = new SystemAttributeRoutine<T>(handle, func);
Oms.RegisterSystemRoutine(handle, routine);
SystemAttributeRoutine<T> routine = new SystemAttributeRoutine<T>(Oms, globalIdentifier, func);
Oms.RegisterSystemRoutine(globalIdentifier, routine);
return routine;
}
public SystemInstanceSetRoutine CreateSystemInstanceSetRoutine(Guid globalIdentifier, Func<Oms, OmsContext, IEnumerable<InstanceHandle>> func)
{
InstanceHandle handle = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.SystemInstanceSetRoutine), globalIdentifier);
SystemInstanceSetRoutine routine = new SystemInstanceSetRoutine(handle, func);
Oms.RegisterSystemRoutine(handle, routine);
SystemInstanceSetRoutine routine = new SystemInstanceSetRoutine(Oms, globalIdentifier, func);
Oms.RegisterSystemRoutine(globalIdentifier, routine);
return routine;
}
}

View File

@ -19,7 +19,6 @@ namespace Mocha.Core.Oop;
public abstract class ConcreteInstanceWrapper : InstanceWrapper
{
public abstract Guid ClassId { get; }
private InstanceHandle TheHandle { get; }
internal ConcreteInstanceWrapper(InstanceHandle handle)

View File

@ -17,7 +17,7 @@
namespace Mocha.Core.Oop;
public class DeferredInstanceWrapper : InstanceWrapper
public abstract class DeferredInstanceWrapper : InstanceWrapper
{
private Oms oms;
private Guid globalIdentifier;

View File

@ -19,6 +19,8 @@ namespace Mocha.Core.Oop;
public abstract class InstanceWrapper : IInstanceWrapper
{
public abstract Guid ClassId { get; }
private InstanceHandle _Handle = InstanceHandle.Empty;
protected abstract InstanceHandle GetHandleInternal();

View File

@ -17,9 +17,9 @@
namespace Mocha.Core.Oop;
public abstract class SystemRoutine : ConcreteInstanceWrapper
public abstract class SystemRoutine : DeferredInstanceWrapper
{
internal SystemRoutine(InstanceHandle handle) : base(handle) { }
internal SystemRoutine(Oms oms, Guid globalIdentifier) : base(oms, globalIdentifier) { }
protected abstract object? ExecuteInternal(Oms oms, OmsContext context);
public object? Execute(Oms oms, OmsContext context)

View File

@ -21,7 +21,7 @@ public class SystemAttributeRoutine : SystemRoutine
{
public override Guid ClassId => KnownInstanceGuids.Classes.SystemAttributeRoutine;
private Func<Oms, OmsContext, object?> Func { get; }
internal SystemAttributeRoutine(InstanceHandle handle, Func<Oms, OmsContext, object?> func) : base(handle)
internal SystemAttributeRoutine(Oms oms, Guid globalIdentifier, Func<Oms, OmsContext, object?> func) : base(oms, globalIdentifier)
{
Func = func;
}
@ -34,7 +34,7 @@ public class SystemAttributeRoutine : SystemRoutine
}
public class SystemAttributeRoutine<T> : SystemAttributeRoutine
{
internal SystemAttributeRoutine(InstanceHandle handle, Func<Oms, OmsContext, T> func) : base(handle, new Func<Oms, OmsContext, object?>(delegate(Oms oms, OmsContext context) { return func(oms, context); }))
internal SystemAttributeRoutine(Oms oms, Guid globalIdentifier, Func<Oms, OmsContext, T> func) : base(oms, globalIdentifier, new Func<Oms, OmsContext, object?>(delegate(Oms oms, OmsContext context) { return func(oms, context); }))
{
}
}

View File

@ -21,7 +21,7 @@ public class SystemInstanceSetRoutine : SystemRoutine
{
public override Guid ClassId => KnownInstanceGuids.Classes.SystemInstanceSetRoutine;
private Func<Oms, OmsContext, IEnumerable<InstanceHandle>> Func { get; }
internal SystemInstanceSetRoutine(InstanceHandle handle, Func<Oms, OmsContext, IEnumerable<InstanceHandle>> func) : base(handle)
internal SystemInstanceSetRoutine(Oms oms, Guid globalIdentifier, Func<Oms, OmsContext, IEnumerable<InstanceHandle>> func) : base(oms, globalIdentifier)
{
Func = func;
}