Type TStellung = 1..16;
TStellungRec =
Record
Class Operator Implicit (Value: TStellung): TStellungRec;
Class Operator Implicit (Rec: TStellungRec): TStellung;
Class Operator Inc (Rec: TStellungRec): TStellungRec;
Class Operator Dec (Rec: TStellungRec): TStellungRec;
Class Operator Equal (Oper1, Oper2: TStellungRec): Boolean;
Class Operator NotEqual (Oper1, Oper2: TStellungRec): Boolean;
Class Operator LessThan (Oper1, Oper2: TStellungRec): Boolean;
Class Operator LessThanOrEqual (Oper1, Oper2: TStellungRec): Boolean;
Class Operator GreaterThan (Oper1, Oper2: TStellungRec): Boolean;
Class Operator GreaterThanOrEqual(Oper1, Oper2: TStellungRec): Boolean;
Class Operator Add (Oper1, Oper2: TStellungRec): TStellungRec;
Class Operator Subtract (Oper1, Oper2: TStellungRec): TStellungRec;
Private
Stellung: TStellung;
Class Procedure RangeCheck (
Var Value: TStellung);
Static;
End;
Class Operator TStellungRec.Implicit(Value: TStellung): TStellungRec;
Begin
Result.Stellung := Value;
RangeCheck(Result.Stellung);
End;
Class Operator TStellungRec.Implicit(Rec: TStellungRec): TStellung;
Begin
Result := Rec.Stellung;
End;
Class Operator TStellungRec.Inc(Rec: TStellungRec): TStellungRec;
Begin
Result.Stellung := Rec.Stellung;
Inc(Result.Stellung);
RangeCheck(Result.Stellung);
End;
Class Operator TStellungRec.Dec(Rec: TStellungRec): TStellungRec;
Begin
Result.Stellung := Rec.Stellung;
Dec(Result.Stellung);
RangeCheck(Result.Stellung);
End;
Class Operator TStellungRec.Equal(Oper1, Oper2: TStellungRec): Boolean;
Begin
Result := Oper1.Stellung = Oper2.Stellung;
End;
Class Operator TStellungRec.NotEqual(Oper1, Oper2: TStellungRec): Boolean;
Begin
Result := Oper1.Stellung <> Oper2.Stellung;
End;
Class Operator TStellungRec.LessThan(Oper1, Oper2: TStellungRec): Boolean;
Begin
Result := Oper1.Stellung < Oper2.Stellung;
End;
Class Operator TStellungRec.LessThanOrEqual(Oper1, Oper2: TStellungRec): Boolean;
Begin
Result := Oper1.Stellung >= Oper2.Stellung;
End;
Class Operator TStellungRec.GreaterThan(Oper1, Oper2: TStellungRec): Boolean;
Begin
Result := Oper1.Stellung > Oper2.Stellung;
End;
Class Operator TStellungRec.GreaterThanOrEqual(Oper1, Oper2: TStellungRec): Boolean;
Begin
Result := Oper1.Stellung >= Oper2.Stellung;
End;
Class Operator TStellungRec.Add(Oper1, Oper2: TStellungRec): TStellungRec;
Begin
Result := Oper1.Stellung + Oper2.Stellung;
RangeCheck(Result.Stellung);
End;
Class Operator TStellungRec.Subtract(Oper1, Oper2: TStellungRec): TStellungRec;
Begin
Result := Oper1.Stellung - Oper2.Stellung;
RangeCheck(Result.Stellung);
End;
Class Procedure TStellungRec.RangeCheck(
Var Value: TStellung);
Begin
While Value < Low(TStellung)
do Value := Value + (High(TStellung) - Low(TStellung) + 1);
While Value > High(TStellung)
do Value := Value - (High(TStellung) - Low(TStellung) + 1);
End;