From 21747aa062b0a2602d7565f0b233fde393cc54c2 Mon Sep 17 00:00:00 2001 From: avery Date: Mon, 2 Mar 2026 17:22:07 -0500 Subject: [PATCH] Saving reflection plugin stuff but i hate so delete time --- .../Kernel/Atrributes/DebugAttributes.cs | 103 ++++++++--------- .../Kernel/Atrributes/DependencyAttributes.cs | 28 +++++ .../Kernel/Component/Component.cs | 11 +- .../ComponentDockerExposure.cs | 48 ++++---- .../ComponentDockerMovement.cs | 12 +- .../ComponentDockerMutation.cs | 12 +- .../Kernel/Overhead/Awperative/Awperative.cs | 107 ++++-------------- .../Overhead/Reflection/DependencyManager.cs | 54 +++++++++ .../Overhead/Reflection/EventManager.cs | 44 +++++++ .../Overhead/Reflection/ReflectionManager.cs | 33 ++++++ .../Kernel/RequiredModules/IDebugger.cs | 12 +- .../Kernel/RequiredModules/IModule.cs | 12 ++ .../Kernel/RequiredModules/IModuleManager.cs | 11 -- .../AwperativeKernel.csproj.nuget.dgspec.json | 22 ++-- .../obj/AwperativeKernel.csproj.nuget.g.props | 8 +- .../net8.0/AwperativeKernel.AssemblyInfo.cs | 2 +- .../AwperativeKernel.AssemblyInfoInputs.cache | 2 +- ....GeneratedMSBuildEditorConfig.editorconfig | 4 +- .../net8.0/AwperativeKernel.assets.cache | Bin 8640 -> 8294 bytes ...ativeKernel.csproj.AssemblyReference.cache | Bin 4333 -> 4263 bytes ...ativeKernel.csproj.CoreCompileInputs.cache | 2 +- .../obj/Debug/net8.0/AwperativeKernel.dll | Bin 36864 -> 35328 bytes .../obj/Debug/net8.0/AwperativeKernel.pdb | Bin 23532 -> 23348 bytes .../obj/Debug/net8.0/ref/AwperativeKernel.dll | Bin 19456 -> 19456 bytes .../Debug/net8.0/refint/AwperativeKernel.dll | Bin 19456 -> 19456 bytes AwperativeKernel/obj/project.assets.json | 20 ++-- AwperativeKernel/obj/project.nuget.cache | 34 +++--- AwperativeKernel/obj/project.packagespec.json | 2 +- .../obj/rider.project.model.nuget.info | 2 +- .../obj/rider.project.restore.info | 2 +- 30 files changed, 348 insertions(+), 239 deletions(-) create mode 100644 AwperativeKernel/Kernel/Atrributes/DependencyAttributes.cs create mode 100644 AwperativeKernel/Kernel/Overhead/Reflection/DependencyManager.cs create mode 100644 AwperativeKernel/Kernel/Overhead/Reflection/EventManager.cs create mode 100644 AwperativeKernel/Kernel/Overhead/Reflection/ReflectionManager.cs create mode 100644 AwperativeKernel/Kernel/RequiredModules/IModule.cs delete mode 100644 AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs diff --git a/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs b/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs index 9329fb9..d220e4f 100644 --- a/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs +++ b/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; namespace AwperativeKernel; @@ -181,39 +182,39 @@ public static class DebugAttributes } } - #endregion - - #region Null/Collection - - /// Requires all elements in a Collection are not null + /// Requires that a given Scene is not null [AttributeUsage(AttributeTargets.All)] - public class CollectionNotNull : Attribute + public class SceneDoesNotExist : Attribute { /// - public static bool VerifyOrThrow(ICollection __collection) { - foreach (object obj in __collection) { - if (obj == null) { - Awperative.Debug.LogError("A given enumerator has null members!", ["Type"], [__collection.GetType().Name]); - return Awperative.Debug.IgnoreErrors; - } - } + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] + public static bool VerifyOrThrow(Scene __scene) { + if (Awperative._scenes.Contains(__scene)) return true; - return true; + Awperative.Debug.LogError("Scene already exists!"); + + return Awperative.Debug.IgnoreErrors; } } + + #endregion + + #region Null/Collection /// Requires all elements in an Enumerator are not null [AttributeUsage(AttributeTargets.All)] - public class EnumeratorNotNull : Attribute + public class EnumerableNotNull : Attribute { /// public static bool VerifyOrThrow(IEnumerable __enumerator) { + if (__enumerator == null) { Awperative.Debug.LogError("A given enumerator is null!"); return Awperative.Debug.IgnoreErrors; } + foreach (object obj in __enumerator) { if (obj == null) { Awperative.Debug.LogError("A given enumerator has null members!", ["Type"], [__enumerator.GetType().Name]); @@ -224,6 +225,42 @@ public static class DebugAttributes return true; } } + + + + /// Requires that the enumerator contains a certain element. + [AttributeUsage(AttributeTargets.All)] + public class EnumerableContains : Attribute + { + + + /// + public static bool VerifyOrThrow(IEnumerable __enumerator, object __object) { + if (__enumerator.Contains(__object)) return true; + + Awperative.Debug.LogError("A given enumerator does not contains an object!", ["EnumeratorType", "ObjectType", "Value"], [__enumerator.GetType().Name, __object.GetType().Name, __object.ToString()]); + + return Awperative.Debug.IgnoreErrors; + } + } + + + + /// Requires that the enumerator does not contain a certain element. + [AttributeUsage(AttributeTargets.All)] + public class EnumerableDoesntContain : Attribute + { + + + /// + public static bool VerifyOrThrow(IEnumerable __enumerator, object __object) { + if (!__enumerator.Contains(__object)) return true; + + Awperative.Debug.LogError("A given enumerator already contains the object object!", ["EnumeratorType", "ObjectType", "Value"], [__enumerator.GetType().Name, __object.GetType().Name, __object.ToString()]); + + return Awperative.Debug.IgnoreErrors; + } + } @@ -260,42 +297,6 @@ public static class DebugAttributes return Awperative.Debug.IgnoreErrors; } } - - - - /// Requires that a collection contains the given item - [AttributeUsage(AttributeTargets.All)] - public class CollectionContains : Attribute - { - - - /// - public static bool VerifyOrThrow<__Type>(__Type __object, ICollection<__Type> __collection) { - if (__collection.Contains(__object)) return true; - - Awperative.Debug.LogError("Collection does not contain object!", ["ObjectType"], [__object.GetType().Name]); - - return Awperative.Debug.IgnoreErrors; - } - } - - - - /// Requires that a collection does not contain the given item - [AttributeUsage(AttributeTargets.All)] - public class CollectionDoesntContain : Attribute - { - - - /// - public static bool VerifyOrThrow<__Type>(__Type __object, ICollection<__Type> __collection) { - if (!__collection.Contains(__object)) return true; - - Awperative.Debug.LogError("Collection already contains object!", ["ObjectType"], [__object.GetType().Name]); - - return Awperative.Debug.IgnoreErrors; - } - } #endregion } \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Atrributes/DependencyAttributes.cs b/AwperativeKernel/Kernel/Atrributes/DependencyAttributes.cs new file mode 100644 index 0000000..9c5f4c7 --- /dev/null +++ b/AwperativeKernel/Kernel/Atrributes/DependencyAttributes.cs @@ -0,0 +1,28 @@ +using System; + + +namespace AwperativeKernel; + + +internal static class DependencyAttributes +{ + + + + /// Shows the source for a given module interface + [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Property)] + public class RequiredModule : Attribute + { + /// Where to assign in the Awperative class. + public string Source { get; set; } + + public RequiredModule() {} + + public RequiredModule(string Source) { + this.Source = Source; + } + } + + + +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Component/Component.cs b/AwperativeKernel/Kernel/Component/Component.cs index 521e398..ff0334b 100644 --- a/AwperativeKernel/Kernel/Component/Component.cs +++ b/AwperativeKernel/Kernel/Component/Component.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Awperative.Kernel.Overhead.Reflection; namespace AwperativeKernel; @@ -59,16 +60,16 @@ public abstract partial class Component : ComponentDocker /// Attempts to send an event to the component, and quietly exits if not. [MarkerAttributes.UnsafeInternal] internal void TryEvent(int __timeEvent) { - Awperative._TypeAssociatedTimeEvents[GetType()][__timeEvent]?.Invoke(this); + EventManager._TypeAssociatedTimeEvents[GetType()][__timeEvent]?.Invoke(this); } /// Adds a new tag to the component [MarkerAttributes.CalculatedProperty, MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Low), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void AddTag([DebugAttributes.NotNull, DebugAttributes.CollectionDoesntContain] string __tag) { + public void AddTag([DebugAttributes.NotNull, DebugAttributes.EnumerableDoesntContain] string __tag) { if(!DebugAttributes.NotNull.VerifyOrThrow(__tag)) return; - if(!DebugAttributes.CollectionDoesntContain.VerifyOrThrow(__tag, _tags)) return; + if(!DebugAttributes.EnumerableDoesntContain.VerifyOrThrow(_tags, __tag)) return; _tags.Add(__tag); ComponentDocker.HashTaggedComponent(__tag, this); @@ -80,9 +81,9 @@ public abstract partial class Component : ComponentDocker /// Removes a tag from the component. [MarkerAttributes.CalculatedProperty, MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Low), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void RemoveTag([DebugAttributes.NotNull,DebugAttributes.CollectionContains] string __tag) { + public void RemoveTag([DebugAttributes.NotNull,DebugAttributes.EnumerableContains] string __tag) { if (!DebugAttributes.NotNull.VerifyOrThrow(__tag)) return; - if(!DebugAttributes.CollectionContains.VerifyOrThrow(__tag, _tags)) return; + if(!DebugAttributes.EnumerableContains.VerifyOrThrow(_tags, __tag)) return; _tags.Remove(__tag); ComponentDocker.UnhashTaggedComponent(__tag, this); diff --git a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerExposure.cs b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerExposure.cs index 5783494..e025b24 100644 --- a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerExposure.cs +++ b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerExposure.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Diagnostics; using System.Linq; @@ -24,19 +25,25 @@ public abstract partial class ComponentDocker /// Tells you whether the docker contains a component with all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public bool Contains(IEnumerable __tags) => GetAll(__tags).Any(); + public bool Contains([DebugAttributes.EnumerableNotNull] IEnumerable __tags) => GetAll(__tags).Any(); /// Tells you whether the docker contains a component with all the given tags and the type [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public bool Contains<__Type>(IEnumerable __tags) where __Type : Component => GetAll<__Type>(__tags).Any(); + public bool Contains<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags) where __Type : Component => GetAll<__Type>(__tags).Any(); /// Tells you whether the docker contains the given component. [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] public bool Contains([DebugAttributes.ComponentNotNull] Component __component) => DebugAttributes.NotNull.VerifyOrThrow(__component) && _componentTypeDictionary.TryGetValue(__component.GetType(), out var components) && components.Contains(__component); + + /// Tells you whether the docker contains the all the given components. + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] + public bool ContainsAll([DebugAttributes.EnumerableNotNull] IEnumerable __components) => __components.All(x => _components.Contains(x)); - - + + /// Gets all components of a given type + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] + public IEnumerable GetAll() => _components; /// Finds the first component with a given Type [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] @@ -50,7 +57,7 @@ public abstract partial class ComponentDocker /// Gets all components of a given type [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public IEnumerable<__Type> GetAll<__Type>() where __Type : Component => _componentTypeDictionary.TryGetValue(typeof(__Type), out var components) ? components.OfType<__Type>().ToList() : []; + public IEnumerable<__Type> GetAll<__Type>() where __Type : Component => _componentTypeDictionary.TryGetValue(typeof(__Type), out HashSet components) ? components.OfType<__Type>().ToList() : []; /// Tries to get all components of a given type and returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] @@ -60,10 +67,10 @@ public abstract partial class ComponentDocker /// Finds all components that have all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public IEnumerable GetAll(IEnumerable __tags) { + public IEnumerable GetAll([DebugAttributes.EnumerableNotNull] IEnumerable __tags) { + if (!DebugAttributes.EnumerableNotNull.VerifyOrThrow(__tags)) return []; HashSet components; - if (_componentTagDictionary.TryGetValue(__tags.First(), out var firstComponents)) components = firstComponents; else return []; foreach(var tag in __tags) @@ -75,7 +82,7 @@ public abstract partial class ComponentDocker /// Tries to find all components that have all the given tags, returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGetAll(IEnumerable __tags, out IEnumerable __components) + public bool TryGetAll([DebugAttributes.EnumerableNotNull] IEnumerable __tags, out IEnumerable __components) { __components = GetAll(__tags); return __components.Any(); } @@ -84,7 +91,7 @@ public abstract partial class ComponentDocker /// Finds all Components that have the given type, and all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public IEnumerable<__Type> GetAll<__Type>(IEnumerable __tags) where __Type : Component { + public IEnumerable<__Type> GetAll<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags) where __Type : Component { if (!__tags.Any()) return []; @@ -103,9 +110,8 @@ public abstract partial class ComponentDocker /// Tries to find all the components that have the given tags and type, returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGetAll<__Type>(IEnumerable __tags, out IEnumerable<__Type> __components) where __Type : Component { - __components = GetAll<__Type>(__tags); return __components.Any(); - } + public bool TryGetAll<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags, out IEnumerable<__Type> __components) where __Type : Component + { __components = GetAll<__Type>(__tags); return __components.Any(); } @@ -117,47 +123,47 @@ public abstract partial class ComponentDocker /// Tries to get all the components with the given tag, returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public bool TryGetAll(string __tag, out IEnumerable __components) { __components = GetAll(__tag); return __components.Any(); } + public bool TryGetAll([DebugAttributes.NotNull] string __tag, out IEnumerable __components) { __components = GetAll(__tag); return __components.Any(); } /// Gets all the components that have a certain type, and a certain tag [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public IEnumerable<__Type> GetAll<__Type>(string __tag) where __Type : Component => GetAll<__Type>([__tag]); + public IEnumerable<__Type> GetAll<__Type>([DebugAttributes.NotNull] string __tag) where __Type : Component => GetAll<__Type>([__tag]); /// Tries to get all the components with a certain tag, and a type. Returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGetAll<__Type>(string __tag, out IEnumerable<__Type> __components) where __Type : Component { __components = GetAll<__Type>(__tag); return __components.Any(); } + public bool TryGetAll<__Type>([DebugAttributes.NotNull] string __tag, out IEnumerable<__Type> __components) where __Type : Component { __components = GetAll<__Type>(__tag); return __components.Any(); } /// Gets the first component with all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public Component Get(IEnumerable __tags) => GetAll(__tags).FirstOrDefault(); + public Component Get([DebugAttributes.EnumerableNotNull] IEnumerable __tags) => GetAll(__tags).FirstOrDefault(); /// Tries to get the first component with all the given tags. Returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGet(IEnumerable __tags, out Component __component) { __component = Get(__tags); return __component != null; } + public bool TryGet([DebugAttributes.EnumerableNotNull] IEnumerable __tags, out Component __component) { __component = Get(__tags); return __component != null; } /// Finds the first component with the given tag [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public Component Get(string __tag) => GetAll([__tag]).FirstOrDefault(); + public Component Get([DebugAttributes.NotNull] string __tag) => GetAll([__tag]).FirstOrDefault(); /// Tries to find the first component with the given tag, returns false if there is none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public bool TryGet(string __tag, out Component __component) { __component = Get(__tag); return __component != null; } + public bool TryGet([DebugAttributes.NotNull] string __tag, out Component __component) { __component = Get(__tag); return __component != null; } /// Gets the first component with the given type and tag [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public __Type Get<__Type>(string __tag) where __Type : Component => GetAll<__Type>(__tag).FirstOrDefault(); + public __Type Get<__Type>([DebugAttributes.NotNull] string __tag) where __Type : Component => GetAll<__Type>(__tag).FirstOrDefault(); /// Tries to get the first component with the given type and tag, returns false if there is none. [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGet<__Type>(string __tag, out __Type __component) where __Type : Component { __component = Get<__Type>(__tag); return __component != null; } + public bool TryGet<__Type>([DebugAttributes.NotNull] string __tag, out __Type __component) where __Type : Component { __component = Get<__Type>(__tag); return __component != null; } diff --git a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMovement.cs b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMovement.cs index 1a50caf..04a976f 100644 --- a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMovement.cs +++ b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMovement.cs @@ -25,8 +25,8 @@ public abstract partial class ComponentDocker /// Moves all components in a list to another docker - public void MoveAll([DebugAttributes.EnumeratorNotNull, DebugAttributes.DockerOwns] IEnumerable __Components, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) { - if(!DebugAttributes.EnumeratorNotNull.VerifyOrThrow(__Components)) return; + public void MoveAll([DebugAttributes.EnumerableNotNull, DebugAttributes.DockerOwns] IEnumerable __Components, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) { + if(!DebugAttributes.EnumerableNotNull.VerifyOrThrow(__Components)) return; if(!DebugAttributes.DockerNotNull.VerifyOrThrow(__componentDocker)) return; if(!DebugAttributes.DifferentDocker.VerifyOrThrow(this, __componentDocker)) return; @@ -35,6 +35,10 @@ public abstract partial class ComponentDocker Move(Component, __componentDocker); } } + + /// Gets all components of a given type + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] + public void MoveAll([DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) => MoveAll(GetAll(), __componentDocker); /// Moves the first component with a given Type [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] @@ -50,14 +54,14 @@ public abstract partial class ComponentDocker /// Moves all components that have all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void MoveAll([DebugAttributes.EnumeratorNotNull] IEnumerable __tags, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) => MoveAll(GetAll(__tags), __componentDocker); + public void MoveAll([DebugAttributes.EnumerableNotNull] IEnumerable __tags, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) => MoveAll(GetAll(__tags), __componentDocker); /// Moves all Components that have the given type, and all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void MoveAll<__Type>([DebugAttributes.EnumeratorNotNull] IEnumerable __tags, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) where __Type : Component => MoveAll(GetAll<__Type>(__tags), __componentDocker); + public void MoveAll<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) where __Type : Component => MoveAll(GetAll<__Type>(__tags), __componentDocker); diff --git a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMutation.cs b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMutation.cs index 194bbb3..d404836 100644 --- a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMutation.cs +++ b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMutation.cs @@ -75,9 +75,15 @@ public abstract partial class ComponentDocker + /// Destroys all the components in a given list + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] + public void DestroyAll() => DestroyAll(GetAll()); + + + /// Destroys all the components in a given list [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void DestroyAll([DebugAttributes.EnumeratorNotNull, DebugAttributes.DockerOwns] IEnumerable __Components) { foreach (Component component in __Components) Destroy(component); } + public void DestroyAll([DebugAttributes.EnumerableNotNull, DebugAttributes.DockerOwns] IEnumerable __Components) { foreach (Component component in __Components.ToArray()) Destroy(component); } @@ -95,14 +101,14 @@ public abstract partial class ComponentDocker /// Destroys all components that have all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void DestroyAll([DebugAttributes.EnumeratorNotNull] IEnumerable __tags) => DestroyAll(GetAll(__tags)); + public void DestroyAll([DebugAttributes.EnumerableNotNull] IEnumerable __tags) => DestroyAll(GetAll(__tags)); /// Destroys all Components that have the given type, and all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void DestroyAll<__Type>([DebugAttributes.EnumeratorNotNull] IEnumerable __tags) where __Type : Component => DestroyAll(GetAll<__Type>(__tags)); + public void DestroyAll<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags) where __Type : Component => DestroyAll(GetAll<__Type>(__tags)); diff --git a/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs b/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs index c1c4e68..92df3bc 100644 --- a/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs +++ b/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs @@ -5,6 +5,7 @@ using System.Collections.ObjectModel; using System.Linq; using System.Linq.Expressions; using System.Reflection; +using Awperative.Kernel.Overhead.Reflection; namespace AwperativeKernel; @@ -42,41 +43,40 @@ public static partial class Awperative /// Awperative's debugger of choice, found from the module manager. - [MarkerAttributes.UnsafeInternal] - public static IDebugger Debug { get; set; } - /// Awperative's module manager of choice, sent in through the Start() function - [MarkerAttributes.UnsafeInternal] - public static IModuleManager ModuleManager { get; private set; } + [MarkerAttributes.UnsafeInternal, DependencyAttributes.RequiredModule] + public static IDebugger Debug { get; internal set; } /// Creates a new Scene with the given name [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Low), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public static Scene CreateScene(string __name) { - if (!ContainsScene(__name)) { - Scene newScene = new Scene(__name); - _scenes.Add(newScene); - return newScene; - } else Debug.LogError("Awperative already has a Scene with that name!", ["Scene", "Name"], [GetScene(__name).GetHashCode().ToString(), __name]); return null; + public static Scene CreateScene([DebugAttributes.NotNull, DebugAttributes.SceneDoesNotExist] string __name) { + if (!DebugAttributes.NotNull.VerifyOrThrow(__name)) return null; + if (!DebugAttributes.SceneDoesNotExist.VerifyOrThrow(GetScene(__name))) return null; + + Scene newScene = new Scene(__name); + _scenes.Add(newScene); + return newScene; } [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Low), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public static void AddScene(Scene __scene) { - if (!ContainsScene(__scene.Name)) { - _scenes.Add(__scene); - } else Debug.LogError("Awperative already has a Scene with that name!", ["Scene", "Name"], [GetScene(__scene.Name).GetHashCode().ToString(), __scene.Name]); return; + public static void AddScene([DebugAttributes.SceneNotNull, DebugAttributes.SceneDoesNotExist] Scene __scene) { + if (!DebugAttributes.SceneNotNull.VerifyOrThrow(__scene)) return; + if (!DebugAttributes.SceneDoesNotExist.VerifyOrThrow(__scene)) return; + + _scenes.Add(__scene); } - - + + /// Finds a Scene from a given name [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public static Scene GetScene(string __name) => _scenes.FirstOrDefault(scene => scene.Name == __name, null); - - - + public static Scene GetScene([DebugAttributes.NotNull] string __name) => !DebugAttributes.NotNull.VerifyOrThrow(__name) ? null : _scenes.FirstOrDefault(scene => scene.Name == __name, null); + + + /// Returns bool based on whether there a scene with the given name or not. [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] public static bool ContainsScene(string __name) => _scenes.Any(scene => scene.Name == __name); @@ -102,65 +102,8 @@ public static partial class Awperative if (IsStarted) return; IsStarted = true; - //SPAGHETTI CODE FIX LATER! maybe move to static method in IModuleManager - foreach (Type type in Assembly.LoadFrom(moduleManagerPath).GetTypes()) { - Console.WriteLine(type.Name); - if (type.GetInterfaces().Contains(typeof(IModuleManager))) { - ModuleManager = (IModuleManager)Activator.CreateInstance(type); - } - } - - List targets = [Assembly.GetCallingAssembly()]; - foreach (Assembly module in ModuleManager.GetDependencies()) { - targets.Add(module); - } - - //Load in all Components nd find the associated types. - foreach (var t in targets) { - Console.WriteLine(t.FullName); - foreach (Type type in t.GetTypes()) { - if (type.IsSubclassOf(typeof(Component))) { - - - Action[] timeEvents = new Action[ComponentEvents.Count]; - - byte eventProfile = 0; - List debugProfile = []; - - for (int i = 0; i < ComponentEvents.Count; i++) { - MethodInfo eventMethod = type.GetMethod(ComponentEvents[i]); - - if (eventMethod != null) { - - var ComponentInstanceParameter = Expression.Parameter(typeof(Component), "__component"); - var Casting = Expression.Convert(ComponentInstanceParameter, type); - var Call = Expression.Call(Casting, eventMethod); - var Lambda = Expression.Lambda>(Call, ComponentInstanceParameter); - timeEvents[i] = Lambda.Compile(); - - } else timeEvents[i] = null; - } - - _TypeAssociatedTimeEvents.Add(type, timeEvents); - } - - if (type.GetInterfaces().Contains(typeof(IDebugger))) { - if (Debug == null) { - if (type.GetConstructor(Type.EmptyTypes) != null) - Debug = (IDebugger)Activator.CreateInstance(type); - else throw new Exception("Awperative doesn't support IDebugger constructor!"); - } else { - throw new Exception("Awperative found multiple debuggers! There can only be one."); - } - } - } - } + ReflectionManager.ResolveModules(AppDomain.CurrentDomain.GetAssemblies()); - if (Debug == null) - throw new Exception("Awperative doesn't have a Debugger!"); - - Debug.Start(); - Debug.LogAction("Successfully Compiled Classes!"); } @@ -202,17 +145,13 @@ public static partial class Awperative scene.ChainEvent(3); } } - - - internal static ReadOnlyCollection ComponentEvents = new(["Load", "Unload", "Update", "Draw", "Create", "Remove"]); - + /// /// List of all type of components and the associated time events /// Each event is a 0 or 1 based on true or false, stored at their index in the byte /// - internal static Dictionary[]> _TypeAssociatedTimeEvents = []; //What to do if there is an error, keep in mind low and none still can have errors, because you are turning off validation checking diff --git a/AwperativeKernel/Kernel/Overhead/Reflection/DependencyManager.cs b/AwperativeKernel/Kernel/Overhead/Reflection/DependencyManager.cs new file mode 100644 index 0000000..fa994c3 --- /dev/null +++ b/AwperativeKernel/Kernel/Overhead/Reflection/DependencyManager.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using AwperativeKernel; + + +namespace Awperative.Kernel.Overhead.Reflection; + + +internal static class DependencyManager +{ + + /// Resolves any needed Awperative dependencies! Given the Type, it searches recursively for all interfaces. If any of the interfaces + /// Has the RequiredModule() attribute, or one of the interfaces in required modules. It will assign it to the assosiated field in the Awperative class. + [MarkerAttributes.UnsafeInternal] + internal static void ResolveDependency(Type __type) { + + Console.WriteLine(__type.FullName); + + foreach (Type typeInterface in __type.GetInterfaces()) { + //Console.WriteLine(" " + typeInterface.FullName); + object[] dependencyInfo = typeInterface.GetCustomAttributes(typeof(DependencyAttribute), true); + + if (dependencyInfo.Length == 0) continue; + + foreach (object attribute in dependencyInfo) { + if (attribute is not DependencyAttributes.RequiredModule moduleAttribute) continue; + + PropertyInfo data = typeof(AwperativeKernel.Awperative).GetProperty(moduleAttribute.Source, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + if (data != null) data.SetValue(null, Activator.CreateInstance(__type)); + } + } + } + + /// Checks all dependency marked variables in Awperative, and ensures that all are present! + [MarkerAttributes.UnsafeInternal] + internal static void ResolveFulfillment() { + + foreach (PropertyInfo propertyInfo in typeof(AwperativeKernel.Awperative).GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)) { + object[] attributes = propertyInfo.GetCustomAttributes(typeof(DependencyAttribute), true); + + if (attributes.Length == 0) continue; + + IModule module = propertyInfo.GetValue(null) as IModule; + + if (module == null) throw new Exception("Failed to find dependency! " + propertyInfo.Name); + + ReflectionManager._modules.Add(module); + module.Start(); + } + } +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Overhead/Reflection/EventManager.cs b/AwperativeKernel/Kernel/Overhead/Reflection/EventManager.cs new file mode 100644 index 0000000..d187158 --- /dev/null +++ b/AwperativeKernel/Kernel/Overhead/Reflection/EventManager.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using AwperativeKernel; + + +namespace Awperative.Kernel.Overhead.Reflection; + + +internal static class EventManager +{ + /// Holds an associated action for each component and a time event. Is built with CompileType() during Start(). + [MarkerAttributes.UnsafeInternal] + internal static Dictionary[]> _TypeAssociatedTimeEvents = []; + + + /// All types of time based events in Awperative. + internal static readonly ImmutableArray Events = ["Load", "Unload", "Update", "Draw", "Create", "Remove"]; + + + /// Compiles a single type, and stores its events in the dictionary. + [MarkerAttributes.UnsafeInternal] + internal static void CompileType(Type __type) { + if (!__type.IsSubclassOf(typeof(Component))) return; + + + List> timeEvents = []; + + foreach (MethodInfo eventMethod in Events.Select(__type.GetMethod)) { + if (eventMethod == null) { timeEvents.Add(null); continue; } + + ParameterExpression ComponentInstanceParameter = Expression.Parameter(typeof(Component), "__component"); + UnaryExpression Casting = Expression.Convert(ComponentInstanceParameter, __type); + MethodCallExpression Call = Expression.Call(Casting, eventMethod); + Expression> Lambda = Expression.Lambda>(Call, ComponentInstanceParameter); + timeEvents.Add(Lambda.Compile()); + } + + _TypeAssociatedTimeEvents.Add(__type, timeEvents.ToArray()); + } +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Overhead/Reflection/ReflectionManager.cs b/AwperativeKernel/Kernel/Overhead/Reflection/ReflectionManager.cs new file mode 100644 index 0000000..9c9053a --- /dev/null +++ b/AwperativeKernel/Kernel/Overhead/Reflection/ReflectionManager.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using AwperativeKernel; + + +namespace Awperative.Kernel.Overhead.Reflection; + + +internal static class ReflectionManager +{ + + /// List of all modules in Awperative + [MarkerAttributes.UnsafeInternal] + internal static List _modules = []; + + /// Resolves all the modules from the calling assembly and module manager + [MarkerAttributes.UnsafeInternal] + internal static void ResolveModules(Assembly[] __assemblies) { + foreach (Assembly assembly in __assemblies) ResolveAssembly(assembly); + + DependencyManager.ResolveFulfillment(); + } + + /// Resolves all the types in an assembly. + [MarkerAttributes.UnsafeInternal] + internal static void ResolveAssembly(Assembly __assembly) { + foreach (Type type in __assembly.GetTypes()) { + DependencyManager.ResolveDependency(type); + EventManager.CompileType(type); + } + } +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs b/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs index 78669c6..1805754 100644 --- a/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs +++ b/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs @@ -1,20 +1,14 @@ -using System; using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Reflection; namespace AwperativeKernel; -public interface IDebugger + +[DependencyAttributes.RequiredModule(Source: "Debug")] +public interface IDebugger : IModule { - - public void Start(); - public void Stop(); public void LogAction(string __message); public void LogAction(string __message, IEnumerable __values, IEnumerable __args); diff --git a/AwperativeKernel/Kernel/RequiredModules/IModule.cs b/AwperativeKernel/Kernel/RequiredModules/IModule.cs new file mode 100644 index 0000000..b7a7783 --- /dev/null +++ b/AwperativeKernel/Kernel/RequiredModules/IModule.cs @@ -0,0 +1,12 @@ +namespace AwperativeKernel; + + +public interface IModule +{ + + + public void Start(); + public void Stop(); + + +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs b/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs deleted file mode 100644 index b4683f7..0000000 --- a/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections.Generic; -using System.Reflection; - - -namespace AwperativeKernel; - - -public interface IModuleManager -{ - public IEnumerable GetDependencies(); -} \ No newline at end of file diff --git a/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.dgspec.json b/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.dgspec.json index 93d3527..9bb9d23 100644 --- a/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.dgspec.json +++ b/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.dgspec.json @@ -1,20 +1,20 @@ { "format": 1, "restore": { - "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj": {} + "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj": {} }, "projects": { - "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj": { + "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", + "projectUniqueName": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", "projectName": "AwperativeKernel", - "projectPath": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", - "packagesPath": "/Users/averynorris/.nuget/packages/", - "outputPath": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/obj/", + "projectPath": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", + "packagesPath": "/home/avery/.nuget/packages/", + "outputPath": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/obj/", "projectStyle": "PackageReference", "configFilePaths": [ - "/Users/averynorris/.nuget/NuGet/NuGet.Config" + "/home/avery/.nuget/NuGet/NuGet.Config" ], "originalTargetFrameworks": [ "net8.0" @@ -38,7 +38,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "10.0.100" + "SdkAnalysisLevel": "9.0.300" }, "frameworks": { "net8.0": { @@ -63,11 +63,11 @@ "downloadDependencies": [ { "name": "Microsoft.AspNetCore.App.Ref", - "version": "[8.0.23, 8.0.23]" + "version": "[8.0.24, 8.0.24]" }, { "name": "Microsoft.NETCore.App.Ref", - "version": "[8.0.23, 8.0.23]" + "version": "[8.0.24, 8.0.24]" } ], "frameworkReferences": { @@ -75,7 +75,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.102/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "/home/avery/.dotnet/sdk/9.0.311/PortableRuntimeIdentifierGraph.json" } } } diff --git a/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.g.props b/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.g.props index 25b6aa4..08dec0c 100644 --- a/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.g.props +++ b/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.g.props @@ -4,12 +4,12 @@ True NuGet $(MSBuildThisFileDirectory)project.assets.json - /Users/averynorris/.nuget/packages/ - /Users/averynorris/.nuget/packages/ + /home/avery/.nuget/packages/ + /home/avery/.nuget/packages/ PackageReference - 7.0.0 + 6.14.0 - + \ No newline at end of file diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs index bbec80c..6c7d647 100644 --- a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs +++ b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("AwperativeKernel")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+daff25af555790c4cc665d8158c8ec80cf2d5cf2")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+227e70219acaaa9bbd4981af01eb79aaf1d96e0e")] [assembly: System.Reflection.AssemblyProductAttribute("AwperativeKernel")] [assembly: System.Reflection.AssemblyTitleAttribute("AwperativeKernel")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache index 84431c9..476eba4 100644 --- a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache +++ b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache @@ -1 +1 @@ -0205d8c69e5e58efd9ceec6d025aa71702700c3efb6b0341b64d64d2efcda724 +5f132d4abe29f474cced3dd72be32c95430c59618df6c594ae25e534fec8180c diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig index cb335e2..cbacfa1 100644 --- a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig +++ b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig @@ -1,7 +1,5 @@ is_global = true build_property.TargetFramework = net8.0 -build_property.TargetFrameworkIdentifier = .NETCoreApp -build_property.TargetFrameworkVersion = v8.0 build_property.TargetPlatformMinVersion = build_property.UsingMicrosoftNETSdkWeb = build_property.ProjectTypeGuids = @@ -10,7 +8,7 @@ build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = Awperative -build_property.ProjectDir = /Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/ +build_property.ProjectDir = /home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 8.0 diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.assets.cache b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.assets.cache index 8dcee15461c66139f60714b33e562a45a82897bf..3412d3519a672cb57dcb427ab0080be30f985d0a 100644 GIT binary patch delta 1183 zcmZva%PT~26vt=W;SPR`%jGwh$@N%y&V@=PI*S&K}kNR2HE zQjD@9{{cz1b|@(pEKJG0Wij{u&TsRp^F8O=`Sd+E&Cd-jfv)yOVzb%86`}X_g@=F? zYaQD@xZ2$sxPHBR2{k$C$*d@IT5X};^#3yTzgL-@o*GxQ#qqf%hzM=bsE70=*UlVn z*hy1>x67o*DqQAP!>Zjw`mI8k_rjMxVX`-@>Qg$&khQzpslr=|%-SSGAA~p$nJ`b3 zLBOTLCnuATNpJ;W%^_!P+D%nQjI1RWwA4NGUJ;=g{Am>9Zo`->ppvKTvSGf%>}&8o z@l6=7pB+z#UifxWoOLOkvaG-9lwnmFlb@fC{;~brzfU{jfq4z>UoJfl8ufDk$@qp}Df&i9 z9J~HudU)!GvKfuAu14T^ugCC?p#4J{yg?-hMM?9^PH2?`Jx0&6L8Zb!vI-*5%1&Su zg`Ok6R78n}z7zG^mi>sisNat2_psWJLmZV5U&l95=oo}9`pvh7zddu0e%Ewy{%##_ zGl!hFTfx`N73b>=w4nmCSs<$L)0j)n(;1#!27YGFI6t?ZmziVE%NZ6nGaoaToR8bd z!wdrF;r8+`1Ht+C!tpM{$$2+on&^}E5Z%#ck`x1cUrCBVsUY6O#*kF~HI-j&Uy*I~ z`y(4QPIV7MiXmylb{3>oeO1cmroJ$(Ak_Bl;xVa5624n(4d-0o)Hz039CLwP@Zb4{_TPe~t%vzX$PD*xr z6A*LQ>IB4G@dVVGY`~ngHybd=?aBts<%`M&48n`c1`Nc7&ISx8&juG^_syX3-8Ye5 z#y9J1RTJVKx`>7On>8``+mLr4Q;=!MyO0@3>vrWRZ74vT6zLs=swqi;ZbRRST|0xq zNt2*Zl_d$vd(datd}iL&Ge~?_Pmm}^k|4bgeQS80f#Ez)U}#5`1ZEcc*1r`nU_1{H zFsjxh0n?z*@Zd7PH84m#PY@)k;v_-Rp>O9~1%t@*2tlOkP7=g9=-d0&!9emnLm;W@ zlLYb(^cU`}gw2EJA({tOgOcX)0rVFkPci5`PZ4yg5+y;Ohn~`jNU_Oxqsl*f@zLkC z1yr;a7Iazo3Q*f}$|tiYxdq)pE%!)Jv5Vf3w7}KoiLB{bfKWnPgb=zMgwTBm;R%iO zOOTHscOf4`4$cdy8=TAK71#x(xaLyr80v&7VI#e89BrM(g<{oF{=KJ%L<-5Xe=?`GQ=^sUU3%at+Rt zK$4z7u0sgq21H%=@W%DQ4^@u1S#PRt(Wq)_)tX8I*4lYdLak-8erQ&S zq0to>Rf$Oeqi&ITqiW1ly`y-+hPpQ_*i1jGKRf?OU({K8)`)6-HxrI5QdWYxsz(ls z(o41@ht3B$WRc~!9vPs+`5<5NY^z{}c4bu*Ek~GL>xLbO-fa=M_K`3Z&ZG)sCE1n6bcD zLA2sV5iYA^np$Rh^lF@1xL%h7#{yFI+_bkY=M6 zf#vL8m9wYPRMZ+en&~scHBOYHjqG}8DD<1G88k{`r$fXndSp8`L_(5@4RLA_4Y8E_A0k7uasU7T diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache index 2b06060827edfdf5883d50b50e15263781b337aa..2072822350c4e755f5a63dc8bb919c1f6393ff6d 100644 GIT binary patch delta 234 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 literal 36864 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 z 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 diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb index 5104910a20f6fe3b8da6cbe49f5a254d3764bc5d..74bce2a046b804cb0a5e627079f9cbe69419a59a 100644 GIT binary patch delta 10249 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 diff --git a/AwperativeKernel/obj/Debug/net8.0/ref/AwperativeKernel.dll b/AwperativeKernel/obj/Debug/net8.0/ref/AwperativeKernel.dll index 8609238f8a98000548b6e3a59d9903b616d731ad..d640c5e6c7b90a06a897d055e877b7daf5c63ade 100644 GIT binary patch literal 19456 zcmeHPdw3kxbw79Zt;c#b#t)1iD=a`@BP83wRuD$EBxB)+j3wJVvs!7#^5WI5*j?Ec zDIkpF)JZ518fd-%QLyqQg(Ntwi&I`zYZaFODQTLfq%Dz&LPPl4G~d_Iex(WhopWbq zN49K8n?Krq8Tp<$zjMw#_uS{)d8{|xa3A@I$dB~idqm&BnU7|nXD7o@M;ARErK6Eo zs=uK&zEa(_D_w{Wk@g6IlAI!$n*?4P5XS_d`vg#@;%W7=bTiS>= zDnI@5qd)(VQ`!WbA1_z+I*72AZodQPW~4Y0QB2N;j++G>zZ_$rHtM=r80ojjlCz^k%?rgZ3$PQhs!ocf2_I3Sx(kWmGEe-~CapDFi zM>Emdx}vqO2z1kG5C|j%arPW>qVBqUA>Rv`)L|G5x4}9j&(VzBb$Kh3gCW<6Mv%DN zYmhugGs^YA-?0CWTcCE+eQ$p2frrX($;bRBgF(7G@L(iJC;dzx75a?O4v}YtpCk4cM*lS&q)$~c zt@krM5@7lfdP4U-5n;(6iKM;UUm2uFgpc`HPU6$=V|j*HavyC9mC+NhiBh7f zsm!E(6`9a%N>?03JU5BYFGtw^{wlVQRx$r^@%c|ehlGxUa@`jSIkn82tiuETNZe^f_3^ z=&DMhHdsC*=v53DM$ZZAiE8vGf+{h1Sof!b%EKBR7xW86!n!{f^e;9#A?Tbct$R_> z>$dJCK|jOD;(V_NYPL)NOP$Xy;oE|Kj%mP_-w{-Uy$qx83R-RZd`-}!m~X86zMy}w zE&oo?LD2>1?*%QB8U^Ve$cI+qxzvbp{<&-YE3lF!L9Mm@Wnl+LkTwv3+=pV!BRf zyHHc;Y|t&us01Ah|6|!@N|A$>`&M{RlP`u5?C3g-MQB3@-Ds>*C6q9?VAt*FGN$sN z>npCre%RL0v%wg8%0b700ycVqf}s_tx8r56ug!z*h+gACe^J@tq6g_SzUw^b8K98k zg}&hXhzfg9487=-{!$>N%3QR=45Ht(?!ep=Sfw0v5a<@=pf@8cXI!HyY|E38xiikg za;fv3R2Nn)a?zXWrfATE41Wn744)I}aJ?K1S9=jPcu_bJ+v0jT7=9>xt0&)^;k~NT zE&ZPIOK>I7vAn6iQhtXjp?fPnJ_X%_8Q@snTk(LZve7|$x8k$P^q@!8ObYFyM9-ELgyqRXS* z#zih_jAo3BU37UgZ(QP{#^`OvQWsqwz00`NMK1+DVO-{-kYhdk(u#^oM##8~A)&l(^0pyNi9i(U#mYpnL5<3_WKHW)7%Ydz=%)#5?l zHcDuR`I52D)jb~y($yaHx=}(q%pV);J-VsrpQh;EG1@(rG2GNSE%AJad>dS}!;H~J z4uu*X5#@BelM5E-LeT(dMcW;9_U97@4c~GP8W*0S=$Ee$b8huFzRnDngM10TB z#|xE9Dp#ozx&}H+tDw6Px)RDjx6{@A7IZEOJQoX6pQ8(`EMsK%J6dAB&p{^@uXVd@ z-N{HZ*2uJr4&z!?LifkcDCk z_+bxvb;cI#37tB;gDa4Wl;3#VgSH{g+Z;>vaK#Z1nut7w-J|VAy&5<|w>u~@ALZTQ zqLJ_mbf<$=zxuQBtK3cb9LN*2OT8+_i-0-|CJE;pNpjb ze%rO={`-WBxc@%oBJRK6aS`{Qi=_Wbi2Lte$5Q&Qgt-6ib9LN*_q&Mu?*SKa|NX9u zxc@%mAnCscUBvxYLfn53xjODY7fJt>5cl8jIhN9YCB*&rSy#vX_c;ei|2^y??!QMI zB>ne!7jgfMxQP4jF&jNdw^Vib4%2Wj0`Ji6UJ2Wj0`r|2A{bzk%7ZuL1x>z?%JZu2=v>%Klk=OC^7Lyzu& z&p}#u)T2A(bCA{@vvmi<-!)dK5}Gh#is31@o`2fQAD?}VxrBb|W5hSPPvarRRQd`Y7AVrR4flNt zcTG&kJ^TXPpDB6wy4*N-mCYjY+E%ME&0YVio_=F z#e9^KR?-o23{H#b8acIKxtBk^r%snF#oe@`-xmK~`ZhlzBc`|qh1O@={HpTPN7RGx z<~EQ~J^U2UI}~ZEOSwbFrjUt&yv#F9+Q5E))RdfjHex!Lw3z5!8x)A9SSf-H< zA>EHO4{0IN`A8QcT|!IXdkM-}LUkzTM7csP-rt`KT1FQO-vAoJ6D6i=gtiO4R_OIY zlS0#=3VW{;<+E_*XFp%3l~`rJPHosjyeKx`rmtY16;UV3H&B)0Cka*R&#=3yQb(|> zs#5jX4Ogp&u#2izZ({dUtrFNZRjc*bEmf-x*yUEMN3rXuR_|h0Tdj^_H&m@cRY}l! z*!@(i1=#hhKq;ExRh3U2z#83!fzz@wvjeqFS?P~+eSQNI09N<_7v#6;1TK) z`!0GDdy_6Yiali)g{qim|2Lst-$%Xpc?zCJ;yFr~>gi{oE9f22RrD@s6FM?X%@hD_ zr83ZsVzWhTy2J+eK#<=gHr=o>sZz0@Do~SVfyS{ve}^ujURoHqn7$c&2Yppe@A&Fy zCcOuG9xe3O(PG%tp&u^-znm=4E9j%3Ep!lc13duRDe@aZ+v(Hrlcv8C`u*Um{xrQ2 ze9eDA8e!Y$k-C5PmYitv4BXBk&Gh z>PS>Uj>;cg2Dv|Ig2qK27kN#P>s1qE`(}|hi@a6rTgARxS!`M((n=!f7Mqkv zh9P;wKP)x}L^1*iq7uodNXEowOeEtX8INq`NFr;6GEZgfhsvZ)%DAk!Na7-C29I?K z{A>Phk#~!HSomS#M}!{{eoXi=;U|Qj5T44}50$f@xbSiCC;Z*zJo|=)jtCtS?U-0j z2tOe_RY;r_oGUJTT=-_;n}zQdzFT;I<>x3As1e#K^Z;mOU{a_*%6yH`R-p%kjtZTO zE><%GsToYiW9(;AsK1K&R?y18sL*ktlS2I_%Ugw}gpQi*p=Ku2?l~NP_Z*IYMEDWm zC%|Kk0*{uN%Y1yUw6^fw!jA|)BK(B#6T-*O75j79eq>1Kl5e7WC!HKLx#F z2J_EEzX`fB!jct2dt;pIC*f~_&aC)r(A@^V=lfoe>4MNn(90^>e?sW6&?jbau0bg` z9b=zQsW(BZgKYU%RZI(FbGLdMe2egpi2OQ{{Lej18eDf>qeIc3`S`xkhdn8Oo4{NE zoF8u;6}S+1-hV1^5%6KOtbsQ_m7tYqV*|UEETGchF^^ zcTxlBUD)X;Jl$Ik{%(AAVBp!_O3-_-TQ%@(?F!I)=}OT1=qk_$v46$A2&jSQO)a30 z;ytZFpU3+F18=n3p?wV0pu^ZP88k|pK);Ib*9`g^-kTcqB=%4S9l;ZCgPx)tus;TB z;4Sd=;Qt2Hph?uvpdX=T5$p*Ufi6RR%di8y0Il`!LjMD`tD^rzy{hP!s2AS~Tn1{W z22elVvQ$w}eF!wHR)UtPM$ig%1!z=V2^v#ZftqR!=s9>3g0ZgJKFQ3^g^`*v{qdYdWpIbbg8--v`!^J>s1nTnd${yfoJ6=tx^|& zepp=$+N73%u2z?VHY0MA)~W{3Rzz;nIz(>LdPHv0HHh5A7l>DYZbsyIkB7)j+KR|c z>O$luZAauLU5Cg`x&e`!bQ2;s=_82Tq;5oRQV$|GDTT;Q+KI?b+J(qXx&@J<JVs zWf8ea1Bl$DJR&!#h{%`FU#LZ(-&B2|FRNcost70G3FNarEVM_Pci5NQ!o9J90qM;!eTM}Nf8A93_Y9Q_eTf5g!rar8$V{lRNo zoSTuTX?1TR(V8v{WRgQInPj1`Y+0gy8tL-sq{~-A+R<>j`SQj@eRl)3w`B+Wt$ea4 zV+p!-Fj;g!OD>bKdW-2?mQ`D=WU3>Z8Ja4!vlnxD*sM<$c6C}sueA*~rVA`?T76q0 z;W+BV*JBy0Eo1dt*`jUWmNH$2HTisU2wpliFGE@mZ;jNnDVG||SgWaNOFq3PS+v^w z2eii|2i|HGlj%%hHSFaMo3RzBTZ*UqIkb*-)|;_K)e zZ$7K3Q=9kCB3>Prdy<(!E0N%SIg5Mh$ZpIfQ)jWLYcExRBVLo5)>@a%%08=@Xv=aJ zr>NlJS>9ggEGF|sXr^f#PeFAs9Lo0Y%IC7_+uq;WcJ0l4O=-Zv-vwQpe(i7exe?6!dv z2FW^n?apYcl}%ZBjqECK9n2QfP)dZo7!ZV3>lCIXlPg#@o44Rb^INU{+#W}s%VNM~ z3tDrvRn$x(Q4kNCbMTi)bPWwyv^H6=sBPbXmBl%cux!o_!&A#TU15v5tU^)8Pc6Cr zfpo^o%ZNoJsWnA>joC9;M7R#Oja$-1)N1t%_VsbIm1LU-GnuK9HHCuJ-;){YN*BF` zUCBHeL>g*uF2B3v!LeV5XtrDV0_NQ5%J%HeT)tl>WHNI`tCn1LXS#1NFLos-t=7)u zV5YbUVOjZ-c&oLuGr7|$4sFHsFO=lEWyHr;E0f$OoJa2jyd{r?qqkVf2!~eQ%Jy20 zMM>pI*mp8JR8rW3MdZbFPdbw>dbBdfY0cgNtgprN9*Z_%oJ=>h+;wN_T-F0?x(s?c zzn{Lnur9sNN_Aq6p4kbH^Y<}y!*kZScFdZ69XrqL)G@%+=}Putdh!fmE|DmL>N3%I zSzH1fFLqnj+2eyXSgCg;^J3JM)1Mn-((*K9EqjqcO~^8|KHayA@LLs(hE2&VMt*)v zvbc-3WeXT3?b)K0&n7cYS*3O^)OGaSf{Pqh4$GtNAHYn_+R{=FZh#k<*|T<|wFiJZ zbxkINDXFJE^IiF&tF0n)t(dd<+z_*;x~WS+Si1af&J}q&lB^gGXwCKRw(<_*aVBv& zf@zlN(>hBU8&|sN>h2n!dKEicCO!DhX5qSZ1`JH|u!v z4oSEDN|fp$ARIvn-ympIHwevv6A`e>~+7jh`Q7a_S~bk zJv@E%M8qUOd!(?o4mpx`eKoT3=!RTz7tTDM-0`j32)bTp#M_eA^iEl&i>^i1+UxQu znJpML#a+47mRy==J@;%|KA+3Gn+WVxr>l?K=%oR}jgHY|3(k11CvS16`?3r;A`^2cq!SN2XTzbD;m73}La1`#h&1!*T)B5aL&F)GleWFCu! zM^I{ak1&yt>yq|_HMyV{j5HbbgY3jya8Zn+d zbV;bku3jCT>Xx(xz1_yRwJl2R?}|~aAJ~=5x^a7_oiwu!c{*RG&KV4G>FmKg zS8}=>&TN5YUCWux&fr)Ui8JT&I)5Kiw}8?>)Wa0p|LNj(?VT&-2h2BhWqv>BQ=Li` za_^UC`hd=w*BjIaHsm|Lt-0K^t#hiwk}cm)p0z!lvEGi`py^HZg~rwk(0e4lgkmGq zwhuS!(-q+z4ZKO)%)iU!d#KiYa}u28hp})l%3ndc?L7O9K{gy1>?b0lFX;B1%v=XP<}{ z7Duj1+*$SAvJZ#j*_0+OPy{ zn{(qrYKWm>^R+0zi2Cal8G(8f6%7M(<3}S5HD`;E1$GN5#G2Sbf(7DgR|~0JB$}^` zD`w2NWw3C;SFUOjv|xufOC8MSkjxw)bhoI}gS+AfE!wMV<^QS=?` zFouwKAw|PFAEM_`6E|y-!wwW}1{*Y8nJtP!3v*F}=SIW{)t0j~a~yH_*zGLyRT_7XymPBksBfVr@Lk67E*0=Lc%Rz>8CxFlrM3L_J!vR`uG2dRp> zjM+Q#$pJhDb9ZgB*cKG*LOfOIN=0+)Hn(-PV4JpPU|^|zgLdVfRds0CuIM@LLn!-^ zI6vPDbB;JHX5qJ}r`~7d?L6K+>L&$w<3*tc{J0r^M9US`30Sgh*-C3={j!F}WN$K= zZ0zYtt!P};klb0{VD+qQOeS|Wq#7@`>Mgu>!93wOnUR2*(FYiwGu_Nw{T zOlA`vP*Q)P7Y%I5GYHnccL98yTFmJVe?}XOjE5QtYIn|EeA?>7`nAJ$GE@=7JNd@SWcz2(MHfy^%;va`og_w%4N<-c^ zji(W@smEJ#{kMX8z!Cm)lq%$HfxmwIrisfKLXDC@n9(@a;JbhU@LWEZy9fLR!CBCZ z*jyt%oakF2FHo<xdQU}l;+^T)}y&3=CHF2b^Qf7xO=N4ycr~Zs| z>-{Qa>wee*pE*P{i1sUbYVpDPVL#rl<2Tz=e4N^XrS@BbZzY!D8x9Mp9$W*y$#?Ak!7Wgkqy&X>g literal 19456 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 literal 19456 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