ISPP.Stack.pas 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. {
  2. Inno Setup Preprocessor
  3. Copyright (C) 2001-2002 Alex Yackimoff
  4. Inno Setup
  5. Copyright (C) 1997-2020 Jordan Russell
  6. Portions by Martijn Laan
  7. For conditions of distribution and use, see LICENSE.TXT.
  8. }
  9. unit ISPP.Stack;
  10. interface
  11. uses Classes;
  12. type
  13. { Borrowed from Delphi 5 Contnrs unit }
  14. { TOrdered class }
  15. TOrderedList = class(TObject)
  16. private
  17. FList: TList;
  18. protected
  19. procedure PushItem(AItem: Pointer); virtual; abstract;
  20. function PopItem: Pointer; virtual;
  21. function PeekItem: Pointer; virtual;
  22. property List: TList read FList;
  23. public
  24. constructor Create;
  25. destructor Destroy; override;
  26. function Count: Integer;
  27. function AtLeast(ACount: Integer): Boolean;
  28. procedure Push(AItem: Pointer);
  29. function Pop: Pointer;
  30. function Peek: Pointer;
  31. end;
  32. { TStack class }
  33. TStack = class(TOrderedList)
  34. protected
  35. procedure PushItem(AItem: Pointer); override;
  36. end;
  37. implementation
  38. uses
  39. ISPP.Consts;
  40. { TOrderedList }
  41. function TOrderedList.AtLeast(ACount: integer): boolean;
  42. begin
  43. Result := List.Count >= ACount;
  44. end;
  45. function TOrderedList.Peek: Pointer;
  46. begin
  47. Result := PeekItem;
  48. end;
  49. function TOrderedList.Pop: Pointer;
  50. begin
  51. Result := PopItem;
  52. end;
  53. procedure TOrderedList.Push(AItem: Pointer);
  54. begin
  55. PushItem(AItem);
  56. end;
  57. function TOrderedList.Count: Integer;
  58. begin
  59. Result := List.Count;
  60. end;
  61. constructor TOrderedList.Create;
  62. begin
  63. inherited Create;
  64. FList := TList.Create;
  65. end;
  66. destructor TOrderedList.Destroy;
  67. begin
  68. List.Free;
  69. inherited Destroy;
  70. end;
  71. function TOrderedList.PeekItem: Pointer;
  72. begin
  73. Result := List[List.Count-1];
  74. end;
  75. function TOrderedList.PopItem: Pointer;
  76. begin
  77. Result := PeekItem;
  78. List.Delete(List.Count-1);
  79. end;
  80. { TStack }
  81. procedure TStack.PushItem(AItem: Pointer);
  82. begin
  83. List.Add(AItem);
  84. end;
  85. end.