using Nocturnis.DataStructures.DataPortGroups; using Nocturnis.DataStructures.DataTypes; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules.ComputationalModules; using Nocturnis.Enigmos.Ports.DataPorts; using Nocturnis.GlobalManagement.Constants; using Nocturnis.GlobalManagement.Providers; using Skeleton.DataStructure; namespace Enigmos.Modules.ComputationalModules.Ternary; public abstract partial class SelectorModule : TernaryComputationalModule, ITernaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule { private IDataPortGroup? DataTypeGroup { get; set; } public HashSet ConfigurablePortGroups { get; set; } = new(); public override void Init() { base.Init(); this.DataOutInit("Output", 3); DataTypeGroup = GlobalProvider.DataStructureProvider!.NewDataPortGroup( this, new IDataPort[]{DataInPorts[1], DataInPorts[2]}.Union(DataOutPorts).ToArray(), "Data Type", DataTypeConstant.BaseDataTypes.Real, DataTypeConstant.DataTypeOptions.AnyType ); DataInPorts[0].SetDataType(DataTypeConstant.BaseDataTypes.Bit); PostInit(); } public override void Define() { (object, DataType) Func(CacheItem cache) { if (this.X(cache).Bit) return (this.Y(cache).Data!, this.Y(cache).Type!); return (this.Z(cache).Data!, this.Z(cache).Type!); } this.Define(Func); } public void Inference() { } }