unit uBitFolge;
{Stellt den Datentyp BitFolge (der Laenge 8) zur Verfuegung, dj, V3, 27.05.03}

interface

type TBit = ( Null, Eins );

type
  TBitFolge = class ( TObject )
  private
    bits : ARRAY [1..8] of TBit;
    // feste Laenge, wenn beliebig sein soll, dann dynamische Arrays noetig.
  public
    constructor Create;
    function getBit( nr : byte ) : TBit;
    procedure setBit( nr : byte; wert : TBit );
    function toString : String;
    procedure fromString( wort : string );
    procedure fromBitFolge( anderebitfolge : TBitFolge );
    function getParitaet : TBit;
  end;

implementation

constructor TBitFolge.Create;
var i : byte;
begin
  inherited Create;
  // und initialisieren
  for i := 1 to 8 do
    Bits[i] := Null;
end;

function TBitFolge.getBit( nr : byte ) : TBit;
// liefert das nr. Bit der BitFolge zurueck
begin
  // was passiert, wenn nr nicht in der Reihung liegt?
  RESULT := Bits[nr];
end;

procedure TBitFolge.setBit ( nr : byte; wert : TBit );
// setzt das nr. Bit auf wert
begin
  // was passiert, wenn nr nicht in der Reihung liegt?
  Bits[nr] := wert;
end;

function TBitFolge.toString : String;
// macht aus einer BitFolge einen String
  function BitToChar( bit : TBit ) : char;
  // macht aus einem Bit ein Zeichen
  begin
    case bit of
      Eins : RESULT := '1';
      else RESULT := '0';
    end;
  end;
var i : byte;
    wort : string;
begin
  wort := '';
  for i := 1 to 8 do
    wort := wort + BitToChar( Bits[i] );
  RESULT := wort;
end;

procedure TBitFolge.fromString( wort : string );
// versucht einen String als Folge von Nullen und Einsen zu interpretieren
var i : byte;
begin
  // falls wort < 8 Zeichen dann mit Nullen auffuellen
  if ( Length( wort ) < 8 ) then
    for i := Length( wort )+1 to 8 do
      wort := '0' + wort;
  // falls wort > 8 Zeichen dann abschneiden ?
  // Wort interpretieren
  for i := 1 to 8 do
    case wort[i] of
      '1' : setBit( i, Eins );
      else setBit( i, Null ); // Ziemlich dreist.
    end;
end;

procedure TBitFolge.fromBitFolge( anderebitfolge : TBitFolge );
// kopiert den Inhalt aus anderebitfolge in diese BitFolge
var i : byte;
begin
  for i := 1 to 8 do
    setBit( i, anderebitfolge.getbit( i ) );
end;

function TBitFolge.getParitaet : TBit;
// fehlt noch
begin
  RESULT := Null;
end;

end.

