/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

  1. (*$JPPDEFINEMACRO JCLTREETYPESINT(NODETYPENAME, EQUALITYCOMPARERINTERFACENAME, CONSTKEYWORD, PARAMETERNAME, TYPENAME)
  2. NODETYPENAME = class
  3. public
  4. Value: TYPENAME;
  5. {$IFDEF BCB}
  6. Children: TDynObjectArray;
  7. {$ELSE ~BCB}
  8. Children: array of NODETYPENAME;
  9. {$ENDIF ~BCB}
  10. ChildrenCount: Integer;
  11. Parent: NODETYPENAME;
  12. function IndexOfChild(AChild: NODETYPENAME): Integer;
  13. function IndexOfValue(CONSTKEYWORDPARAMETERNAME: TYPENAME; const AEqualityComparer: EQUALITYCOMPARERINTERFACENAME): Integer;
  14. end;*)
  15. (*$JPPDEFINEMACRO JCLTREEINT(NODETYPENAME, SELFCLASSNAME, ANCESTORCLASSNAME, BASECONTAINERINTERFACENAME, FLATCONTAINERINTERFACENAME,
  16. EQUALITYCOMPARERINTERFACENAME, COLLECTIONINTERFACENAME, TREEINTERFACENAME, STDITRINTERFACENAME, TREEITRINTERFACENAME,
  17. INTERFACEADDITIONAL, SECTIONADDITIONAL, COLLECTIONFLAGS, OWNERSHIPDECLARATION,
  18. CONSTKEYWORD, PARAMETERNAME, TYPENAME, DEFAULTVALUE)
  19. SELFCLASSNAME = class(ANCESTORCLASSNAME, {$IFDEF THREADSAFE} IJclLockable, {$ENDIF THREADSAFE}
  20. IJclIntfCloneable, IJclCloneable, IJclPackable, IJclGrowable, IJclBaseContainer,
  21. BASECONTAINERINTERFACENAME, FLATCONTAINERINTERFACENAME, EQUALITYCOMPARERINTERFACENAME,INTERFACEADDITIONAL
  22. COLLECTIONINTERFACENAME, TREEINTERFACENAME)SECTIONADDITIONAL
  23. private
  24. FRoot: NODETYPENAME;
  25. FTraverseOrder: TJclTraverseOrder;
  26. protected
  27. procedure ExtractNode(var ANode: NODETYPENAME);
  28. procedure RemoveNode(var ANode: NODETYPENAME);
  29. function CloneNode(Node, Parent: NODETYPENAME): NODETYPENAME;
  30. function NodeContains(ANode: NODETYPENAME; CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
  31. procedure PackNode(ANode: NODETYPENAME);
  32. procedure AssignDataTo(Dest: TJclAbstractContainerBase); override;
  33. procedure AssignPropertiesTo(Dest: TJclAbstractContainerBase); override;
  34. public
  35. constructor Create(OWNERSHIPDECLARATION);
  36. destructor Destroy; override;
  37. { IJclPackable }
  38. procedure Pack; override;
  39. procedure SetCapacity(Value: Integer); override;
  40. { COLLECTIONINTERFACENAME }
  41. function Add(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;COLLECTIONFLAGS
  42. function AddAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
  43. procedure Clear;COLLECTIONFLAGS
  44. function CollectionEquals(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
  45. function Contains(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;COLLECTIONFLAGS
  46. function ContainsAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
  47. function Extract(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;COLLECTIONFLAGS
  48. function ExtractAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
  49. function First: STDITRINTERFACENAME;COLLECTIONFLAGS
  50. function IsEmpty: Boolean;COLLECTIONFLAGS
  51. function Last: STDITRINTERFACENAME;COLLECTIONFLAGS
  52. function Remove(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;COLLECTIONFLAGS
  53. function RemoveAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
  54. function RetainAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;COLLECTIONFLAGS
  55. function Size: Integer;COLLECTIONFLAGS
  56. {$IFDEF SUPPORTS_FOR_IN}
  57. function GetEnumerator: STDITRINTERFACENAME;COLLECTIONFLAGS
  58. {$ENDIF SUPPORTS_FOR_IN}
  59. { TREEINTERFACENAME }
  60. function GetRoot: TREEITRINTERFACENAME;
  61. function GetTraverseOrder: TJclTraverseOrder;
  62. procedure SetTraverseOrder(Value: TJclTraverseOrder);
  63. property Root: TREEITRINTERFACENAME read GetRoot;
  64. property TraverseOrder: TJclTraverseOrder read GetTraverseOrder write SetTraverseOrder;
  65. end;*)
  66. (*$JPPDEFINEMACRO JCLTREEITRINT(BASEITRCLASSNAME, PREORDERITRCLASSNAME, POSTORDERITRCLASSNAME, NODETYPENAME, TREECLASSNAME,
  67. STDITRINTERFACENAME, TREEITRINTERFACENAME, EQUALITYCOMPARERINTERFACENAME,
  68. CONSTKEYWORD, PARAMETERNAME, TYPENAME, DEFAULTVALUE, GETTERFUNCTIONNAME, SETTERPROCEDURENAME)
  69. BASEITRCLASSNAME = class(TJclAbstractIterator, STDITRINTERFACENAME, TREEITRINTERFACENAME)
  70. protected
  71. FCursor: NODETYPENAME;
  72. FStart: TItrStart;
  73. FOwnTree: TREECLASSNAME;
  74. FEqualityComparer: EQUALITYCOMPARERINTERFACENAME; // keep a reference of tree interface
  75. procedure AssignPropertiesTo(Dest: TJclAbstractIterator); override;
  76. function GetNextCursor: NODETYPENAME; virtual; abstract;
  77. // return next node on the same level
  78. function GetNextSibling: NODETYPENAME; virtual; abstract;
  79. function GetPreviousCursor: NODETYPENAME; virtual; abstract;
  80. public
  81. constructor Create(OwnTree: TREECLASSNAME; ACursor: NODETYPENAME; AValid: Boolean; AStart: TItrStart);
  82. { STDITRINTERFACENAME }
  83. function Add(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
  84. procedure Extract;
  85. function GETTERFUNCTIONNAME: TYPENAME;
  86. function HasNext: Boolean;
  87. function HasPrevious: Boolean;
  88. function Insert(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
  89. function IteratorEquals(const AIterator: STDITRINTERFACENAME): Boolean;
  90. function Next: TYPENAME;
  91. function NextIndex: Integer;
  92. function Previous: TYPENAME;
  93. function PreviousIndex: Integer;
  94. procedure Remove;
  95. procedure Reset;
  96. procedure SETTERPROCEDURENAME(CONSTKEYWORDPARAMETERNAME: TYPENAME);
  97. {$IFDEF SUPPORTS_FOR_IN}
  98. function MoveNext: Boolean;
  99. property Current: TYPENAME read GETTERFUNCTIONNAME;
  100. {$ENDIF SUPPORTS_FOR_IN}
  101. { TREEITRINTERFACENAME }
  102. function AddChild(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
  103. function ChildrenCount: Integer;
  104. procedure DeleteChild(Index: Integer);
  105. procedure DeleteChildren;
  106. procedure ExtractChild(Index: Integer);
  107. procedure ExtractChildren;
  108. function GetChild(Index: Integer): TYPENAME;
  109. function HasChild(Index: Integer): Boolean;
  110. function HasParent: Boolean;
  111. function IndexOfChild(CONSTKEYWORDPARAMETERNAME: TYPENAME): Integer;
  112. function InsertChild(Index: Integer; CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
  113. function Parent: TYPENAME;
  114. procedure SetChild(Index: Integer; CONSTKEYWORDPARAMETERNAME: TYPENAME);
  115. end;
  116. PREORDERITRCLASSNAME = class(BASEITRCLASSNAME, STDITRINTERFACENAME, TREEITRINTERFACENAME, {$IFDEF THREADSAFE} IJclLockable, {$ENDIF THREADSAFE}
  117. IJclIntfCloneable, IJclCloneable)
  118. protected
  119. function CreateEmptyIterator: TJclAbstractIterator; override;
  120. function GetNextCursor: NODETYPENAME; override;
  121. function GetNextSibling: NODETYPENAME; override;
  122. function GetPreviousCursor: NODETYPENAME; override;
  123. end;
  124. POSTORDERITRCLASSNAME = class(BASEITRCLASSNAME, STDITRINTERFACENAME, TREEITRINTERFACENAME, {$IFDEF THREADSAFE} IJclLockable, {$ENDIF THREADSAFE}
  125. IJclIntfCloneable, IJclCloneable)
  126. protected
  127. function CreateEmptyIterator: TJclAbstractIterator; override;
  128. function GetNextCursor: NODETYPENAME; override;
  129. function GetNextSibling: NODETYPENAME; override;
  130. function GetPreviousCursor: NODETYPENAME; override;
  131. end;*)