Upgrade structure of code base
This commit is contained in:
@@ -1,32 +1,27 @@
|
||||
using Enigmos.Modules.ControllingModules;
|
||||
using Enigmos.Modules.Other;
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using TabulaSmaragdina.Constants;
|
||||
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 : TerminalModule, IComputationalCompositeModule
|
||||
public partial class SRLatchModule : BaseModule,
|
||||
ITerminalModule,
|
||||
ISourceModule,
|
||||
IDuplicateOutputModule,
|
||||
IOperationModule
|
||||
{
|
||||
private DataInPort? Input1 { get; set; }
|
||||
private DataInPort? Input2 { get; set; }
|
||||
public OutputSubModule? Output1 { get; set; }
|
||||
public OutputSubModule? Output2 { get; set; }
|
||||
public override IEnumerable<BasePort> Ports => new[] { Input1, Input2 }!;
|
||||
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||
public override IEnumerable<IBasePort> Ports => DataInPorts.Union<IBasePort>(DataOutPorts);
|
||||
|
||||
private bool State { get; set; }
|
||||
public IBaseModule[] SubModules() => new IBaseModule[] { Output1, Output2 };
|
||||
public void Compute(IRootModule root)
|
||||
{
|
||||
Output1!.DataOut.ResultData.Bit = State;
|
||||
Output2!.DataOut.ResultData.Bit = State;
|
||||
}
|
||||
|
||||
protected override void Consume(RootModule root)
|
||||
public void Drain()
|
||||
{
|
||||
bool set = Input1!.GetData(root).Bit;
|
||||
bool reset = Input2!.GetData(root).Bit;
|
||||
bool set = DataInPorts[0].GetData.Get!.Bit;
|
||||
bool reset = DataInPorts[1].GetData.Get!.Bit;
|
||||
if (set && reset)
|
||||
State = false;
|
||||
else if (set)
|
||||
@@ -34,33 +29,18 @@ public partial class SRLatchModule : TerminalModule, IComputationalCompositeModu
|
||||
else if (reset)
|
||||
State = false;
|
||||
}
|
||||
protected OutputSubModule GetOutputModule(string path)
|
||||
{
|
||||
OutputSubModule res = GetNode<OutputSubModule>(path);
|
||||
res.Init();
|
||||
res.ParentModule = this;
|
||||
res.Board = Board;
|
||||
return res;
|
||||
}
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
Input1 = GetPort<DataInPort>("Input1");
|
||||
Input1.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
Input2 = GetPort<DataInPort>("Input2");
|
||||
Input2.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
Output1 = GetOutputModule("Output1");
|
||||
Output1.DataOut.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
Output2 = GetOutputModule("Output2");
|
||||
Output2.DataOut.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
this.DataInInit("Input",2);
|
||||
this.DataOutInit("Output", 2);
|
||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Bit);
|
||||
this.SetInputType(EnigmosConstant.DataPortTypes.Bit);
|
||||
PostInit();
|
||||
}
|
||||
|
||||
public override void UpdateCables()
|
||||
|
||||
public void Define()
|
||||
{
|
||||
base.UpdateCables();
|
||||
foreach (IBaseModule subModule in SubModules())
|
||||
subModule.UpdateCables();
|
||||
|
||||
this.Define(cache => (State, EnigmosConstant.DataPortTypes.Bit));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user