/jcl/source/prototypes/containers/JclTrees.int
https://github.com/the-Arioch/jcl · Unknown · 133 lines · 131 code · 2 blank · 0 comment · 0 complexity · ad945bad55d2d56cf5d5edb6157cac58 MD5 · raw file
- (*$JPPDEFINEMACRO JCLTREETYPESINT(NODETYPENAME, EQUALITYCOMPARERINTERFACENAME, CONSTKEYWORD, PARAMETERNAME, TYPENAME)
- NODETYPENAME = class
- public
- Value: TYPENAME;
- {$IFDEF BCB}
- Children: TDynObjectArray;
- {$ELSE ~BCB}
- Children: array of NODETYPENAME;
- {$ENDIF ~BCB}
- ChildrenCount: Integer;
- Parent: NODETYPENAME;
- function IndexOfChild(AChild: NODETYPENAME): Integer;
- function IndexOfValue(CONSTKEYWORDPARAMETERNAME: TYPENAME; const AEqualityComparer: EQUALITYCOMPARERINTERFACENAME): Integer;
- end;*)
- (*$JPPDEFINEMACRO JCLTREEINT(NODETYPENAME, SELFCLASSNAME, ANCESTORCLASSNAME, BASECONTAINERINTERFACENAME, FLATCONTAINERINTERFACENAME,
- EQUALITYCOMPARERINTERFACENAME, COLLECTIONINTERFACENAME, TREEINTERFACENAME, STDITRINTERFACENAME, TREEITRINTERFACENAME,
- INTERFACEADDITIONAL, SECTIONADDITIONAL, COLLECTIONFLAGS, OWNERSHIPDECLARATION,
- CONSTKEYWORD, PARAMETERNAME, TYPENAME, DEFAULTVALUE)
- SELFCLASSNAME = class(ANCESTORCLASSNAME, {$IFDEF THREADSAFE} IJclLockable, {$ENDIF THREADSAFE}
- IJclIntfCloneable, IJclCloneable, IJclPackable, IJclGrowable, IJclBaseContainer,
- BASECONTAINERINTERFACENAME, FLATCONTAINERINTERFACENAME, EQUALITYCOMPARERINTERFACENAME,INTERFACEADDITIONAL
- COLLECTIONINTERFACENAME, TREEINTERFACENAME)SECTIONADDITIONAL
- private
- FRoot: NODETYPENAME;
- FTraverseOrder: TJclTraverseOrder;
- protected
- procedure ExtractNode(var ANode: NODETYPENAME);
- procedure RemoveNode(var ANode: NODETYPENAME);
- function CloneNode(Node, Parent: NODETYPENAME): NODETYPENAME;
- function NodeContains(ANode: NODETYPENAME; CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
- procedure PackNode(ANode: NODETYPENAME);
- procedure AssignDataTo(Dest: TJclAbstractContainerBase); override;
- procedure AssignPropertiesTo(Dest: TJclAbstractContainerBase); override;
- public
- constructor Create(OWNERSHIPDECLARATION);
- destructor Destroy; override;
- { IJclPackable }
- procedure Pack; override;
- procedure SetCapacity(Value: Integer); override;
- { COLLECTIONINTERFACENAME }
- function Add(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;COLLECTIONFLAGS
- function AddAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
- procedure Clear;COLLECTIONFLAGS
- function CollectionEquals(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
- function Contains(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;COLLECTIONFLAGS
- function ContainsAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
- function Extract(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;COLLECTIONFLAGS
- function ExtractAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
- function First: STDITRINTERFACENAME;COLLECTIONFLAGS
- function IsEmpty: Boolean;COLLECTIONFLAGS
- function Last: STDITRINTERFACENAME;COLLECTIONFLAGS
- function Remove(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;COLLECTIONFLAGS
- function RemoveAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
- function RetainAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
- function Size: Integer;COLLECTIONFLAGS
- {$IFDEF SUPPORTS_FOR_IN}
- function GetEnumerator: STDITRINTERFACENAME;COLLECTIONFLAGS
- {$ENDIF SUPPORTS_FOR_IN}
- { TREEINTERFACENAME }
- function GetRoot: TREEITRINTERFACENAME;
- function GetTraverseOrder: TJclTraverseOrder;
- procedure SetTraverseOrder(Value: TJclTraverseOrder);
- property Root: TREEITRINTERFACENAME read GetRoot;
- property TraverseOrder: TJclTraverseOrder read GetTraverseOrder write SetTraverseOrder;
- end;*)
- (*$JPPDEFINEMACRO JCLTREEITRINT(BASEITRCLASSNAME, PREORDERITRCLASSNAME, POSTORDERITRCLASSNAME, NODETYPENAME, TREECLASSNAME,
- STDITRINTERFACENAME, TREEITRINTERFACENAME, EQUALITYCOMPARERINTERFACENAME,
- CONSTKEYWORD, PARAMETERNAME, TYPENAME, DEFAULTVALUE, GETTERFUNCTIONNAME, SETTERPROCEDURENAME)
- BASEITRCLASSNAME = class(TJclAbstractIterator, STDITRINTERFACENAME, TREEITRINTERFACENAME)
- protected
- FCursor: NODETYPENAME;
- FStart: TItrStart;
- FOwnTree: TREECLASSNAME;
- FEqualityComparer: EQUALITYCOMPARERINTERFACENAME; // keep a reference of tree interface
- procedure AssignPropertiesTo(Dest: TJclAbstractIterator); override;
- function GetNextCursor: NODETYPENAME; virtual; abstract;
- // return next node on the same level
- function GetNextSibling: NODETYPENAME; virtual; abstract;
- function GetPreviousCursor: NODETYPENAME; virtual; abstract;
- public
- constructor Create(OwnTree: TREECLASSNAME; ACursor: NODETYPENAME; AValid: Boolean; AStart: TItrStart);
- { STDITRINTERFACENAME }
- function Add(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
- procedure Extract;
- function GETTERFUNCTIONNAME: TYPENAME;
- function HasNext: Boolean;
- function HasPrevious: Boolean;
- function Insert(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
- function IteratorEquals(const AIterator: STDITRINTERFACENAME): Boolean;
- function Next: TYPENAME;
- function NextIndex: Integer;
- function Previous: TYPENAME;
- function PreviousIndex: Integer;
- procedure Remove;
- procedure Reset;
- procedure SETTERPROCEDURENAME(CONSTKEYWORDPARAMETERNAME: TYPENAME);
- {$IFDEF SUPPORTS_FOR_IN}
- function MoveNext: Boolean;
- property Current: TYPENAME read GETTERFUNCTIONNAME;
- {$ENDIF SUPPORTS_FOR_IN}
- { TREEITRINTERFACENAME }
- function AddChild(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
- function ChildrenCount: Integer;
- procedure DeleteChild(Index: Integer);
- procedure DeleteChildren;
- procedure ExtractChild(Index: Integer);
- procedure ExtractChildren;
- function GetChild(Index: Integer): TYPENAME;
- function HasChild(Index: Integer): Boolean;
- function HasParent: Boolean;
- function IndexOfChild(CONSTKEYWORDPARAMETERNAME: TYPENAME): Integer;
- function InsertChild(Index: Integer; CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
- function Parent: TYPENAME;
- procedure SetChild(Index: Integer; CONSTKEYWORDPARAMETERNAME: TYPENAME);
- end;
- PREORDERITRCLASSNAME = class(BASEITRCLASSNAME, STDITRINTERFACENAME, TREEITRINTERFACENAME, {$IFDEF THREADSAFE} IJclLockable, {$ENDIF THREADSAFE}
- IJclIntfCloneable, IJclCloneable)
- protected
- function CreateEmptyIterator: TJclAbstractIterator; override;
- function GetNextCursor: NODETYPENAME; override;
- function GetNextSibling: NODETYPENAME; override;
- function GetPreviousCursor: NODETYPENAME; override;
- end;
- POSTORDERITRCLASSNAME = class(BASEITRCLASSNAME, STDITRINTERFACENAME, TREEITRINTERFACENAME, {$IFDEF THREADSAFE} IJclLockable, {$ENDIF THREADSAFE}
- IJclIntfCloneable, IJclCloneable)
- protected
- function CreateEmptyIterator: TJclAbstractIterator; override;
- function GetNextCursor: NODETYPENAME; override;
- function GetNextSibling: NODETYPENAME; override;
- function GetPreviousCursor: NODETYPENAME; override;
- end;*)