using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules.ComputationalModules; using Nocturnis.Enigmos.Ports; using Nocturnis.Enigmos.Ports.DataPorts.Directions; using Nocturnis.GlobalManagement.Constants; namespace Enigmos.Modules.TerminalModules; public partial class SRLatchModule : BaseModule, ITerminalModule, ISourceModule, IDuplicateOutputModule, IOperationModule { public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty(); public IDataInPort[] DataInPorts { get; set; } = Array.Empty(); public override IEnumerable Ports => DataInPorts.Union(DataOutPorts); private bool State { get; set; } public void Drain() { bool set = DataInPorts[0].GetData.Get!.Bit; bool reset = DataInPorts[1].GetData.Get!.Bit; if (set && reset) State = false; else if (set) State = true; else if (reset) State = false; } public override void Init() { base.Init(); this.DataInInit("Input",2); this.DataOutInit("Output", 2); this.SetOutputType(EnigmosConstant.DataPortTypes.Bit); this.SetInputType(EnigmosConstant.DataPortTypes.Bit); PostInit(); } public void Define() { this.Define(cache => (State, EnigmosConstant.DataPortTypes.Bit)); } }