objs.pas
上传用户:yjb1804
上传日期:2021-01-30
资源大小:3105k
文件大小:2k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit objs;
  2. interface
  3. uses classes,strutils,sysutils,Variants,Contnrs;
  4. type
  5.   //去掉了TOrderedList的Create和Destroy方法。不先创建FList。
  6.   //从而,可以在子类中子类化FList的类型。
  7.   TCustomOrderList=class(TObject)
  8.   private
  9.     FList: TList;
  10.   protected
  11.     procedure PushItem(AItem: Pointer); virtual; abstract;
  12.     function PopItem: Pointer; virtual;
  13.     function PeekItem: Pointer; virtual;
  14.     property List: TList read FList Write FList;
  15.   public
  16.     function Count: Integer;
  17.     function AtLeast(ACount: Integer): Boolean;
  18.     function Push(AItem: Pointer): Pointer;
  19.     function Pop: Pointer;
  20.     function Peek: Pointer;
  21.   end;
  22.   //TCustomObjectList=class
  23.   TCustomQueue=class(TCustomOrderList)
  24.   protected
  25.     procedure PushItem(AItem: Pointer); override;
  26.   end;
  27. implementation
  28. { TCustomOrderList }
  29. function TCustomOrderList.AtLeast(ACount: integer): boolean;
  30. begin
  31.   Result := List.Count >= ACount;
  32. end;
  33. function TCustomOrderList.Peek: Pointer;
  34. begin
  35.   Result := PeekItem;
  36. end;
  37. function TCustomOrderList.Pop: Pointer;
  38. begin
  39.   Result := PopItem;
  40. end;
  41. function TCustomOrderList.Push(AItem: Pointer): Pointer;
  42. begin
  43.   PushItem(AItem);
  44.   Result := AItem;
  45. end;
  46. function TCustomOrderList.Count: Integer;
  47. begin
  48.   Result := List.Count;
  49. end;
  50. function TCustomOrderList.PeekItem: Pointer;
  51. begin
  52.   Result := List[List.Count-1];
  53. end;
  54. function TCustomOrderList.PopItem: Pointer;
  55. begin
  56.   Result := PeekItem;
  57.   List.Delete(List.Count-1);
  58. end;
  59. { TCustomQueue }
  60. procedure TCustomQueue.PushItem(AItem: Pointer);
  61. begin
  62.   List.Insert(0, AItem);
  63. end;
  64. end.