Ignore:
Timestamp:
Feb 8, 2012, 1:04:21 PM (14 years ago)
Author:
chronos
Message:
  • Modified: TListChar in unit SpecializedList replaced by more general TGString in GenericString.
  • Added: TGBitmap example implementation.
  • Modified: TGList splitted to TGAbstractList and TGList as memory implementation.
  • Modified: TGMatrix splitted to TGAbstractMatrix and TGMatrix as memory implementation.
Location:
Generics/NativeGenerics/Units
Files:
2 added
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • Generics/NativeGenerics/Units/GenericList.pas

    r322 r324  
    1010type
    1111
    12   { TGList }
    13 
    14   TGList<TItem> = class
     12  { TGAbstractList }
     13
     14  TGAbstractList<TItem> = class
    1515  public
    1616  type
     
    2121    TItemArray = array of TItem;
    2222  private
     23    function GetLast: TItem; virtual; abstract;
     24    procedure SetLast(AValue: TItem); virtual; abstract;
     25    function GetFirst: TItem; virtual; abstract;
     26    procedure SetFirst(AValue: TItem); virtual; abstract;
     27    function GetCount: TIndex; virtual; abstract;
     28    procedure SetCount(const AValue: TIndex); virtual; abstract;
     29    procedure SetCapacity(const AValue: TIndex); virtual; abstract;
     30    function GetCapacity: TIndex; virtual; abstract;
     31    function Get(Index: TIndex): TItem; virtual; abstract;
     32    procedure Put(Index: TIndex; const AValue: TItem); virtual; abstract;
     33  public
     34    constructor Create; virtual;
     35    property Count: TIndex read GetCount write SetCount;
     36    property Capacity: TIndex read GetCapacity write SetCapacity;
     37    property Items[Index: TIndex]: TItem read Get write Put; default;
     38    property First: TItem read GetFirst write SetFirst;
     39    property Last: TItem read GetLast write SetLast;
     40  end;
     41
     42  { TGList }
     43
     44  TGList<TItem> = class(TGAbstractList<TItem>)
     45  private
    2346    FCount: TIndex;
    2447    FItems: array of TItem;
    25     function Get(Index: TIndex): TItem;
    26     function GetCapacity: TIndex;
    27     function GetFirst: TItem;
    28     function GetLast: TItem;
    29     procedure SetCapacity(const AValue: TIndex);
     48    function Get(Index: TIndex): TItem; override;
     49    function GetCapacity: TIndex; override;
     50    function GetFirst: TItem; override;
     51    function GetLast: TItem; override;
     52    function GetCount: TIndex; override;
     53    procedure SetCapacity(const AValue: TIndex); override;
    3054    procedure SetCapacityOptimized(const NewCapacity: TIndex);
    31     procedure SetCount(const AValue: TIndex);
    32     procedure SetFirst(AValue: TItem);
    33     procedure SetLast(AValue: TItem);
    34     procedure Put(Index: TIndex; const AValue: TItem); virtual;
     55    procedure SetCount(const AValue: TIndex); override;
     56    procedure SetFirst(AValue: TItem); override;
     57    procedure SetLast(AValue: TItem); override;
     58    procedure Put(Index: TIndex; const AValue: TItem); override;
    3559    procedure QuickSort(L, R : TIndex; Compare: TSortCompare);
    3660  public
     
    4771    procedure Explode(Text, Separator: string; Converter: TFromStringConverter; SlicesCount: Integer = -1);
    4872    function Extract(Item: TItem): TItem;
    49     property First: TItem read GetFirst write SetFirst;
    5073    procedure Fill(Start, Count: TIndex; Value: TItem);
    5174    function GetArray(Index, ACount: TIndex): TItemArray;
     
    6891    procedure Sort(Compare: TSortCompare);
    6992    procedure SetArray(Values: array of TItem);
    70     property Count: TIndex read FCount write SetCount;
    71     property Capacity: TIndex read GetCapacity write SetCapacity;
    72     property Items[Index: TIndex]: TItem read Get write Put; default;
    73     property Last: TItem read GetLast write SetLast;
    7493  end;
    7594
     
    82101    procedure Clear; override;
    83102    procedure Assign(Source: TGList<TItem>); override;
    84     constructor Create;
     103    constructor Create; override;
    85104    destructor Destroy; override;
    86105  end;
     
    286305end;
    287306
     307function TGList<TItem>.GetCount: TIndex;
     308begin
     309  Result := FCount;
     310end;
     311
    288312procedure TGList<TItem>.SetLast(AValue: TItem);
    289313begin
     
    663687end;
    664688
     689{ TGAbstractList<TItem> }
     690
     691constructor TGAbstractList<TItem>.Create;
     692begin
     693end;
     694
    665695end.
  • Generics/NativeGenerics/Units/GenericMatrix.pas

    r321 r324  
    99
    1010type
    11   TGMatrix<TItem> = class
     11  TGAbstractMatrix<TItem> = class
    1212  public
    1313    type
     
    2424        Y: TIndexY;
    2525      end;
     26  protected
     27    function GetItemXY(X: TIndexX; Y: TIndexY): TItem; virtual; abstract;
     28    procedure PutItemXY(X: TIndexX; Y: TIndexY; const AValue: TItem); virtual; abstract;
     29    function GetItem(Index: TIndex): TItem; virtual; abstract;
     30    function GetCapacity: TIndex; virtual; abstract;
     31    function GetLast: TItem; virtual; abstract;
     32    function GetFirst: TItem; virtual; abstract;
     33    function GetCount: TIndex; virtual; abstract;
     34    procedure SetLast(AValue: TItem); virtual; abstract;
     35    procedure SetFirst(AValue: TItem); virtual; abstract;
     36    procedure PutItem(Index: TIndex; const AValue: TItem);  virtual; abstract;
     37    procedure SetCount(const AValue: TIndex); virtual; abstract;
     38  public
     39    property Count: TIndex read GetCount write SetCount;
     40    property ItemsXY[X: TIndexX; Y: TIndexY]: TItem
     41      read GetItemXY write PutItemXY; default;
     42    property Items[Index: TIndex]: TItem
     43      read GetItem write PutItem;
     44    property Last: TItem read GetLast write SetLast;
     45  end;
     46
     47  TGMatrix<TItem> = class(TGAbstractMatrix<TItem>)
     48  public
     49    type
     50      TIndex = TGAbstractMatrix<TItem>.TIndex;
     51  protected
     52    function GetItemXY(X: TIndexX; Y: TIndexY): TItem; override;
     53    procedure PutItemXY(X: TIndexX; Y: TIndexY; const AValue: TItem); override;
     54    function GetItem(Index: TIndex): TItem; override;
     55    function GetLast: TItem; override;
     56    function GetFirst: TItem; override;
     57    function GetCount: TIndex; override;
     58    procedure SetLast(AValue: TItem); override;
     59    procedure SetFirst(AValue: TItem); override;
     60    procedure PutItem(Index: TIndex; const AValue: TItem);  override;
     61    procedure SetCount(const AValue: TIndex); override;
    2662  private
    2763    FItems: array of array of TItem;
    2864    FCount: TIndex;
    29     function GetItemXY(X: TIndexX; Y: TIndexY): TItem;
    30     function GetItem(Index: TIndex): TItem;
    31     function GetCapacity: TIndex;
    32     function GetLast: TItem;
    33     function GetFirst: TItem;
     65    function GetCapacity: TIndex; override;
    3466    procedure SetCapacity(const AValue: TIndex);
    35     procedure SetLast(AValue: TItem);
    36     procedure SetFirst(AValue: TItem);
    37     procedure PutItemXY(X: TIndexX; Y: TIndexY; const AValue: TItem); virtual;
    38     procedure PutItem(Index: TIndex; const AValue: TItem); virtual;
    39     procedure SetCount(const AValue: TIndex);
    4067  public
    4168    function Add(Item: TItem): TIndex;
     
    7299    procedure Sort(Compare: TSortCompare);
    73100    procedure SetArray(Values: array of TItem);
    74     property Count: TIndex read FCount write SetCount;
    75101    property Capacity: TIndex read GetCapacity write SetCapacity;
    76     property ItemsXY[X: TIndexX; Y: TIndexY]: TItem
    77       read GetItemXY write PutItemXY; default;
    78     property Items[Index: TIndex]: TItem
    79       read GetItem write PutItem;
    80     property Last: TItem read GetLast write SetLast;
     102  end;
     103
     104  TGRawMatrix<TItem> = class(TGAbstractMatrix<TItem>)
     105  public
     106    type
     107      TIndex = TGAbstractMatrix<TItem>.TIndex;
     108  private
     109    FData: Pointer;
     110    FCount: TIndex;
    81111  end;
    82112
     
    620650end;
    621651
     652function TGMatrix<TItem>.GetCount: TIndex;
     653begin
     654  Result := FCount;
     655end;
     656
     657
    622658end.
Note: See TracChangeset for help on using the changeset viewer.