Ignore:
Timestamp:
Jan 9, 2012, 4:03:09 PM (12 years ago)
Author:
chronos
Message:
Location:
Generics/NativeGenerics
Files:
10 added
3 edited

Legend:

Unmodified
Added
Removed
  • Generics/NativeGenerics/NativeGenerics.lpk

    r132 r313  
    11<?xml version="1.0"?>
    22<CONFIG>
    3   <Package Version="3">
     3  <Package Version="4">
    44    <PathDelim Value="\"/>
    55    <Name Value="NativeGenerics"/>
     6    <AddToProjectUsesSection Value="True"/>
    67    <Author Value="Chronos"/>
    78    <CompilerOptions>
    8       <Version Value="9"/>
     9      <Version Value="11"/>
    910      <PathDelim Value="\"/>
    1011      <SearchPaths>
    1112        <OtherUnitFiles Value="Units"/>
    12         <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)\"/>
     13        <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
    1314      </SearchPaths>
    1415      <CodeGeneration>
     
    2728    <License Value="GNU/GPL"/>
    2829    <Version Minor="1"/>
    29     <Files Count="8">
     30    <Files Count="11">
    3031      <Item1>
    3132        <Filename Value="ReadMe.txt"/>
     
    6061        <UnitName Value="GenericStack"/>
    6162      </Item8>
     63      <Item9>
     64        <Filename Value="Units\GenericMatrix.pas"/>
     65        <UnitName Value="GenericMatrix"/>
     66      </Item9>
     67      <Item10>
     68        <Filename Value="Units\GenericStream.pas"/>
     69        <UnitName Value="GenericStream"/>
     70      </Item10>
     71      <Item11>
     72        <Filename Value="Units\SpecializedList.pas"/>
     73        <UnitName Value="SpecializedList"/>
     74      </Item11>
    6275    </Files>
    6376    <Type Value="RunAndDesignTime"/>
  • Generics/NativeGenerics/NativeGenerics.pas

    r132 r313  
    99uses
    1010  GenericList, GenericTree, GenericDictionary, GenericQueue, GenericRange,
    11   GenericSet, GenericStack, LazarusPackageIntf;
     11  GenericSet, GenericStack, GenericMatrix, GenericStream, SpecializedList,
     12  LazarusPackageIntf;
    1213
    1314implementation
  • Generics/NativeGenerics/Units/GenericList.pas

    r132 r313  
    1212  private
    1313  type
    14     TGListIndex = Integer;
     14    TIndex = NativeInt;
    1515    TSortCompare = function(Item1, Item2: TItem): Integer of object;
    1616    TToStringConverter = function(Item: TItem): string;
     
    1919  var
    2020    FItems: array of TItem;
    21     FCount: TGListIndex;
    22     function Get(Index: TGListIndex): TItem;
    23     function GetCapacity: TGListIndex;
     21    FCount: TIndex;
     22    function Get(Index: TIndex): TItem;
     23    function GetCapacity: TIndex;
    2424    function GetLast: TItem;
    2525    function GetFirst: TItem;
    26     procedure SetCapacity(const AValue: TGListIndex);
    27     procedure SetCapacityOptimized(const NewCapacity: TGListIndex);
     26    procedure SetCapacity(const AValue: TIndex);
     27    procedure SetCapacityOptimized(const NewCapacity: TIndex);
    2828    procedure SetLast(AValue: TItem);
    2929    procedure SetFirst(AValue: TItem);
    30     procedure Put(Index: TGListIndex; const AValue: TItem); virtual;
    31     procedure SetCount(const AValue: TGListIndex); virtual;
    32     procedure QuickSort(L, R : TGListIndex; Compare: TSortCompare);
     30    procedure Put(Index: TIndex; const AValue: TItem); virtual;
     31    procedure SetCount(const AValue: TIndex); virtual;
     32    procedure QuickSort(L, R : TIndex; Compare: TSortCompare);
    3333  public
    34     function Add(Item: TItem): TGListIndex;
     34    function Add(Item: TItem): TIndex;
    3535    procedure AddArray(Values: array of TItem);
    3636    procedure AddList(List: TGList);
    3737    procedure Assign(Source: TGList); virtual;
    3838    procedure Clear; virtual;
    39     procedure Delete(Index: TGListIndex); virtual;
    40     procedure DeleteItems(Index, Count: TGListIndex);
     39    procedure Delete(Index: TIndex); virtual;
     40    procedure DeleteItems(Index, Count: TIndex);
    4141    function EqualTo(List: TGList): Boolean;
    42     procedure Exchange(Index1, Index2: TGListIndex);
     42    procedure Exchange(Index1, Index2: TIndex);
    4343    procedure Explode(Text, Separator: string; Converter: TFromStringConverter; SlicesCount: Integer = -1);
    4444    function Extract(Item: TItem): TItem;
    4545    property First: TItem read GetFirst write SetFirst;
    46     procedure Fill(Start, Count: TGListIndex; Value: TItem);
     46    procedure Fill(Start, Count: TIndex; Value: TItem);
    4747    function GetArray: TItemArray;
    4848    function Implode(Separator: string; Converter: TToStringConverter): string;
    49     function IndexOf(Item: TItem; Start: TGListIndex = 0): TGListIndex;
    50     function IndexOfList(List: TGList; Start: TGListIndex = 0): TGListIndex;
    51     procedure Insert(Index: TGListIndex; Item: TItem);
    52     procedure InsertList(Index: TGListIndex; List: TGList);
    53     procedure InsertArray(Index: TGListIndex; Values: array of TItem);
    54     procedure Move(CurIndex, NewIndex: TGListIndex);
    55     procedure MoveItems(CurIndex, NewIndex, Count: TGListIndex);
    56     function Remove(Item: TItem): TGListIndex;
     49    function IndexOf(Item: TItem; Start: TIndex = 0): TIndex;
     50    function IndexOfList(List: TGList; Start: TIndex = 0): TIndex;
     51    procedure Insert(Index: TIndex; Item: TItem);
     52    procedure InsertList(Index: TIndex; List: TGList);
     53    procedure InsertArray(Index: TIndex; Values: array of TItem);
     54    procedure Move(CurIndex, NewIndex: TIndex);
     55    procedure MoveItems(CurIndex, NewIndex, Count: TIndex);
     56    function Remove(Item: TItem): TIndex;
    5757    procedure Reverse;
    5858    procedure Sort(Compare: TSortCompare);
    59     procedure SetArray(Values: TItemArray);
    60     property Count: TGListIndex read FCount write SetCount;
    61     property Capacity: TGListIndex read GetCapacity write SetCapacity;
    62     property Items[Index: TGListIndex]: TItem read Get write Put; default;
     59    procedure SetArray(Values: array of TItem);
     60    property Count: TIndex read FCount write SetCount;
     61    property Capacity: TIndex read GetCapacity write SetCapacity;
     62    property Items[Index: TIndex]: TItem read Get write Put; default;
    6363    property Last: TItem read GetLast write SetLast;
    6464  end;
     
    8484    constructor Create;
    8585    destructor Destroy; override;
     86
    8687  end;
    8788
     
    9495{ TGList }
    9596
    96 function TGList<TItem>.GetCapacity: TGListIndex;
     97function TGList<TItem>.GetCapacity: TIndex;
    9798begin
    9899  Result := Length(FItems);
    99100end;
    100101
    101 procedure TGList<TItem>.SetCapacity(const AValue: TGListIndex);
     102procedure TGList<TItem>.SetCapacity(const AValue: TIndex);
    102103begin
    103104  if (AValue < FCount) then
     
    106107end;
    107108
    108 procedure TGList<TItem>.SetCapacityOptimized(const NewCapacity: TGListIndex);
    109 var
    110   IncSize: TGListIndex;
     109procedure TGList<TItem>.SetCapacityOptimized(const NewCapacity: TIndex);
     110var
     111  IncSize: TIndex;
    111112begin
    112113  if NewCapacity > Capacity then begin
     
    130131end;
    131132
    132 function TGList<TItem>.Get(Index: TGListIndex): TItem;
     133function TGList<TItem>.Get(Index: TIndex): TItem;
    133134begin
    134135  if (Index < 0) or (Index >= Count) then
     
    137138end;
    138139
    139 procedure TGList<TItem>.Put(Index: TGListIndex; const AValue: TItem);
     140procedure TGList<TItem>.Put(Index: TIndex; const AValue: TItem);
    140141begin
    141142  if (Index < 0) or (Index >= Count) then
     
    144145end;
    145146
    146 procedure TGList<TItem>.SetCount(const AValue: TGListIndex);
     147procedure TGList<TItem>.SetCount(const AValue: TIndex);
    147148begin
    148149  if (AValue < 0) then
     
    165166end;
    166167
    167 procedure TGList<TItem>.QuickSort(L, R: TGListIndex; Compare: TSortCompare);
    168 var
    169   I, J: TGListIndex;
     168procedure TGList<TItem>.QuickSort(L, R: TIndex; Compare: TSortCompare);
     169var
     170  I, J: TIndex;
    170171  P, Q: TItem;
    171172begin
     
    196197procedure TGList<TItem>.Assign(Source: TGList);
    197198var
    198   I: TGListIndex;
     199  I: TIndex;
    199200begin
    200201  Count := Source.Count;
     
    208209function TGList<TItem>.Extract(Item: TItem): TItem;
    209210var
    210   I: TGListIndex;
     211  I: TIndex;
    211212begin
    212213  I := IndexOf(Item);
     
    218219end;
    219220
    220 function TGList<TItem>.IndexOf(Item: TItem; Start: TGListIndex): TGListIndex;
     221function TGList<TItem>.IndexOf(Item: TItem; Start: TIndex): TIndex;
    221222begin
    222223  Result := Start;
     
    227228end;
    228229
    229 procedure TGList<TItem>.Insert(Index: TGListIndex; Item: TItem);
     230procedure TGList<TItem>.Insert(Index: TIndex; Item: TItem);
    230231begin
    231232  if (Index < 0) or (Index > FCount ) then
     
    238239end;
    239240
    240 procedure TGList<TItem>.InsertList(Index: TGListIndex; List: TGList);
    241 var
    242   I: TGListIndex;
     241procedure TGList<TItem>.InsertList(Index: TIndex; List: TGList);
     242var
     243  I: TIndex;
    243244begin
    244245  I := 0;
     
    249250end;
    250251
    251 function TGList<TItem>.IndexOfList(List: TGList; Start: TGListIndex): TGListIndex;
    252 var
    253   I: TGListIndex;
     252function TGList<TItem>.IndexOfList(List: TGList; Start: TIndex): TIndex;
     253var
     254  I: TIndex;
    254255begin
    255256  if List.Count > 0 then begin
     
    300301end;
    301302
    302 procedure TGList<TItem>.Move(CurIndex, NewIndex: TGListIndex);
     303procedure TGList<TItem>.Move(CurIndex, NewIndex: TIndex);
    303304var
    304305  Temp: TItem;
     
    320321end;
    321322
    322 procedure TGList<TItem>.MoveItems(CurIndex, NewIndex, Count: TGListIndex);
     323procedure TGList<TItem>.MoveItems(CurIndex, NewIndex, Count: TIndex);
    323324var
    324325  S: Integer;
     
    345346end;
    346347
    347 function TGList<TItem>.Remove(Item: TItem): TGListIndex;
     348function TGList<TItem>.Remove(Item: TItem): TIndex;
    348349begin
    349350  Result := IndexOf(Item);
     
    354355function TGList<TItem>.EqualTo(List: TGList): Boolean;
    355356var
    356   I: TGListIndex;
     357  I: TIndex;
    357358begin
    358359  Result := Count = List.Count;
     
    371372procedure TGList<TItem>.Reverse;
    372373var
    373   I: TGListIndex;
     374  I: TIndex;
    374375begin
    375376  I := 0;
     
    388389procedure TGList<TItem>.AddArray(Values: array of TItem);
    389390var
    390   I: TGListIndex;
     391  I: TIndex;
    391392begin
    392393  I := 0;
     
    397398end;
    398399
    399 procedure TGList<TItem>.SetArray(Values: TItemArray);
    400 var
    401   I: TGListIndex;
     400procedure TGList<TItem>.SetArray(Values: array of TItem);
     401var
     402  I: TIndex;
    402403begin
    403404  Clear;
     
    409410end;
    410411
    411 procedure TGList<TItem>.InsertArray(Index: TGListIndex; Values: array of TItem);
    412 var
    413   I: TGListIndex;
     412procedure TGList<TItem>.InsertArray(Index: TIndex; Values: array of TItem);
     413var
     414  I: TIndex;
    414415begin
    415416  I := 0;
     
    422423function TGList<TItem>.Implode(Separator: string; Converter: TToStringConverter): string;
    423424var
    424   I: TGListIndex;
     425  I: TIndex;
    425426begin
    426427  Result := '';
     
    445446end;
    446447
    447 function TGList<TItem>.Add(Item: TItem): TGListIndex;
     448function TGList<TItem>.Add(Item: TItem): TIndex;
    448449begin
    449450  Count := Count + 1;
     
    454455procedure TGList<TItem>.AddList(List: TGList);
    455456var
    456   I: TGListIndex;
     457  I: TIndex;
    457458begin
    458459  I := 0;
     
    469470end;
    470471
    471 procedure TGList<TItem>.Delete(Index: TGListIndex);
     472procedure TGList<TItem>.Delete(Index: TIndex);
    472473begin
    473474  if (Index < 0) or (Index >= FCount) then
     
    478479end;
    479480
    480 procedure TGList<TItem>.DeleteItems(Index, Count: TGListIndex);
    481 var
    482   I: TGListIndex;
     481procedure TGList<TItem>.DeleteItems(Index, Count: TIndex);
     482var
     483  I: TIndex;
    483484begin
    484485  I := Index;
     
    489490end;
    490491
    491 procedure TGList<TItem>.Fill(Start, Count: TGListIndex; Value: TItem);
    492 var
    493   I: TGListIndex;
     492procedure TGList<TItem>.Fill(Start, Count: TIndex; Value: TItem);
     493var
     494  I: TIndex;
    494495begin
    495496  I := Start;
     
    500501end;
    501502
    502 procedure TGList<TItem>.Exchange(Index1, Index2: TGListIndex);
     503procedure TGList<TItem>.Exchange(Index1, Index2: TIndex);
    503504var
    504505  Temp: TItem;
Note: See TracChangeset for help on using the changeset viewer.