ISPP.Stack.pas 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. {
  2. Inno Setup Preprocessor
  3. Copyright (C) 2001-2002 Alex Yackimoff
  4. Inno Setup
  5. Copyright (C) 1997-2025 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
  12. Classes, Generics.Collections;
  13. type
  14. { Borrowed from Delphi 5 Contnrs unit }
  15. { TOrdered class }
  16. TOrderedList<T> = class(TObject)
  17. private
  18. FList: TList<T>;
  19. protected
  20. procedure PushItem(AItem: T); virtual; abstract;
  21. function PopItem: T; virtual;
  22. function PeekItem: T; virtual;
  23. property List: TList<T> read FList;
  24. public
  25. constructor Create;
  26. destructor Destroy; override;
  27. function Count: NativeInt;
  28. function AtLeast(ACount: NativeInt): Boolean;
  29. procedure Push(AItem: T);
  30. function Pop: T;
  31. function Peek: T;
  32. end;
  33. { TStack class }
  34. TStack<T> = class(TOrderedList<T>)
  35. protected
  36. procedure PushItem(AItem: T); override;
  37. end;
  38. implementation
  39. uses
  40. ISPP.Consts;
  41. { TOrderedList }
  42. function TOrderedList<T>.AtLeast(ACount: NativeInt): boolean;
  43. begin
  44. Result := List.Count >= ACount;
  45. end;
  46. function TOrderedList<T>.Peek: T;
  47. begin
  48. Result := PeekItem;
  49. end;
  50. function TOrderedList<T>.Pop: T;
  51. begin
  52. Result := PopItem;
  53. end;
  54. procedure TOrderedList<T>.Push(AItem: T);
  55. begin
  56. PushItem(AItem);
  57. end;
  58. function TOrderedList<T>.Count: NativeInt;
  59. begin
  60. Result := List.Count;
  61. end;
  62. constructor TOrderedList<T>.Create;
  63. begin
  64. inherited Create;
  65. FList := TList<T>.Create;
  66. end;
  67. destructor TOrderedList<T>.Destroy;
  68. begin
  69. List.Free;
  70. inherited Destroy;
  71. end;
  72. function TOrderedList<T>.PeekItem: T;
  73. begin
  74. Result := List[List.Count-1];
  75. end;
  76. function TOrderedList<T>.PopItem: T;
  77. begin
  78. Result := PeekItem;
  79. List.Delete(List.Count-1);
  80. end;
  81. { TStack }
  82. procedure TStack<T>.PushItem(AItem: T);
  83. begin
  84. List.Add(AItem);
  85. end;
  86. end.