program test_TStringToPointerTree;
uses
AvgLvlTree;
type
TPieceType = (ptEmpty,
ptPawnWhite, ptPawnBlack,
ptRookWhite, ptRookBlack,
ptKnightWhite, ptKnightBlack,
ptBishopWhite, ptBishopBlack,
ptQueenWhite, ptQueenBlack,
ptKingWhite, ptKingBlack);
TPieceRange = ptPawnWhite..ptKingBlack;
TPiece = record
Piece: TPieceType;
end;
TBoardColType = (colA, colB, colC, colD, colE, colF, colG, colH);
TBoardColRange = colA..colH;
TBoardRowType = (row1, row2, row3, row4, row5, row6, row7, row8);
TBoardRowRange = row1..row8;
TBoard = array[TBoardColRange] of array[TBoardRowRange] of TPiece;
TBoardObj = class
public
Name: string;
Board: TBoard;
end;
var
NameToObj: TStringToPointerTree;
mv1, mv2: string;
Board1, Board2, xboard: TBoardObj;
begin
// create
NameToObj:=TStringToPointerTree.Create(false);
mv1:='1. c4';
mv2:='1. c4 c5';
// init some boards
Board1:=TBoardObj.Create;
Board1.Name:=mv1;
Board1.Board[colC, row4].Piece:=ptPawnWhite;
writeln('1)', Board1.Name, ' = ', Board1.Board[colC, row4].Piece);
NameToObj[Board1.Name] := @Board1;
Board2:=TBoardObj.Create;
Board2.Name:=mv2;
Board2.Board[colC, row4].Piece:=ptPawnWhite;
Board2.Board[colC, row5].Piece:=ptPawnBlack;
writeln('2)', Board2.Name, ' = ', Board2.Board[colC, row5].Piece);
NameToObj[Board2.Name] := @Board2;
writeln('Count = ', NameToObj.Count);
// get value
if NameToObj.Contains(mv2) then begin
xboard:=TBoardObj(NameToObj[mv2]);
writeln('3) ', xboard.Name, ' = ', xboard.Board[colC, row5].Piece); // exception here
end else begin
writeln(mv2, ' not found!');
end;
// enumerate all
// for xboard in TBoardObj(NameToObj.GetEnumerator) do
// writeln('- ', xboard.Name, ' = ', xboard.Board[colC, row4].Piece);
// free
NameToObj.Clear;
NameToObj.Free;
end.