Trigger.Cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Second
{
class Trigger : Element
{
bool[] Input;
bool Out, NOut, Qt = true;
//Конструктор(по умолчанию сбрасывает экземпляр класса)
public Trigger()
: base("Триггер", 2, 1)
{
Input = new bool[2];
Out = false;
NOut = false;
}
// Конструктор копирования
public Trigger(Trigger Prev)
{
Prev.Input.CopyTo(this.Input, 0);
this.Out = Prev.Out;
this.NOut = Prev.NOut;
}
//метод, задающий значения на входах
public bool SetValue(bool[] Value)
{
if (Value.GetLength(0) == Input.GetLength(0))
{
Value.CopyTo(this.Input, 0);
return true;
}
else
return false;
}
//Метод опрашивающий входы
public bool GetValue(int Index, out bool Error)
{
if (Index < Input.GetLength(0))
{
Error = false;
return Input[Index];
}
else
{
Error = true;
return false;
}
}
public bool SetQt(bool Value)
{
return Qt = Value;
}
//Метод вычисляющий состояние экземпляра класса на выходе
public bool Calculate()
{
if (!Input[1]) //R = 0;
{
if (Input[0] == Qt) // S = Qt
{
Out = Input[0];
NOut = !Out;
}
else
{
Out = !Input[0];
NOut = !Out;
Qt = Input[0];
}
}
else
{
Out = false;
Qt = false;
NOut = false;
}
return Out;
}
//Значение на выходе
public bool GetOut()
{
return Out;
}
//Значение на инверсном выходе
public bool GetNOut()
{
return NOut;
}
//переопределение метода equals
public override bool Equals(System.Object obj)
{
// если параметр не может быть приведен к CombElem false:
Trigger p = obj as Trigger;
if ((object)p == null)
{
return false;
}
// сравнение на общее число элементов массива Input
if (Input.Length != p.Input.Length) return false;
//сравнение массива со значением входов
for (int i = 0; i < Input.Length; i++)
{
if (Input[i] != p.Input[i])
return false;
}
return true;
}
public override int GetHashCode()
{
return base.GetHashCode() ^ NOut.GetHashCode();
}
// переопределение ==
public static bool operator ==(Trigger a, Trigger b)
{
return (a.NOut == b.NOut) && (a.Out == b.Out) && (a.Input == b.Input);
}
public static bool operator !=(Trigger a, Trigger b)
{
return !(a == b);
}
}
}