Changeset 423


Ignore:
Timestamp:
Sep 18, 2012, 8:17:09 AM (12 years ago)
Author:
chronos
Message:
Location:
Generics/NativeGenerics
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • Generics/NativeGenerics/Demo/Demo.lpi

    r379 r423  
    3838      </Item2>
    3939    </RequiredPackages>
    40     <Units Count="60">
     40    <Units Count="68">
    4141      <Unit0>
    4242        <Filename Value="Demo.lpr"/>
     
    346346        <Filename Value="../Units/GenericList.pas"/>
    347347        <UnitName Value="GenericList"/>
     348        <IsVisibleTab Value="True"/>
    348349        <EditorIndex Value="1"/>
    349350        <WindowIndex Value="0"/>
    350         <TopLine Value="12"/>
    351         <CursorPos X="74" Y="43"/>
    352         <UsageCount Value="60"/>
     351        <TopLine Value="530"/>
     352        <CursorPos X="1" Y="542"/>
     353        <UsageCount Value="61"/>
    353354        <Loaded Value="True"/>
    354355      </Unit35>
     
    356357        <Filename Value="../Units/GenericMatrix.pas"/>
    357358        <UnitName Value="GenericMatrix"/>
    358         <IsVisibleTab Value="True"/>
    359         <EditorIndex Value="5"/>
    360         <WindowIndex Value="0"/>
    361         <TopLine Value="103"/>
    362         <CursorPos X="5" Y="116"/>
    363         <UsageCount Value="38"/>
     359        <EditorIndex Value="13"/>
     360        <WindowIndex Value="0"/>
     361        <TopLine Value="94"/>
     362        <CursorPos X="18" Y="118"/>
     363        <UsageCount Value="39"/>
    364364        <Loaded Value="True"/>
    365365      </Unit36>
     
    383383        <Filename Value="../Units/GenericDictionary.pas"/>
    384384        <UnitName Value="GenericDictionary"/>
    385         <EditorIndex Value="4"/>
     385        <EditorIndex Value="12"/>
    386386        <WindowIndex Value="0"/>
    387387        <TopLine Value="1"/>
    388388        <CursorPos X="1" Y="1"/>
    389         <UsageCount Value="39"/>
     389        <UsageCount Value="40"/>
    390390        <Loaded Value="True"/>
    391391      </Unit39>
     
    432432        <Filename Value="../Units/GenericRange.pas"/>
    433433        <UnitName Value="GenericRange"/>
    434         <EditorIndex Value="2"/>
     434        <EditorIndex Value="10"/>
    435435        <WindowIndex Value="0"/>
    436436        <TopLine Value="4"/>
    437437        <CursorPos X="6" Y="16"/>
    438         <UsageCount Value="39"/>
     438        <UsageCount Value="40"/>
    439439        <Loaded Value="True"/>
    440440      </Unit45>
     
    449449        <Filename Value="../Units/GenericTree.pas"/>
    450450        <UnitName Value="GenericTree"/>
    451         <EditorIndex Value="3"/>
     451        <EditorIndex Value="11"/>
    452452        <WindowIndex Value="0"/>
    453453        <TopLine Value="50"/>
    454454        <CursorPos X="49" Y="68"/>
    455         <UsageCount Value="39"/>
     455        <UsageCount Value="40"/>
    456456        <Loaded Value="True"/>
    457457      </Unit47>
     
    459459        <Filename Value="../Units/GenericString.pas"/>
    460460        <UnitName Value="GenericString"/>
    461         <EditorIndex Value="6"/>
     461        <EditorIndex Value="14"/>
    462462        <WindowIndex Value="0"/>
    463463        <TopLine Value="35"/>
    464464        <CursorPos X="23" Y="40"/>
    465         <UsageCount Value="32"/>
     465        <UsageCount Value="33"/>
    466466        <Loaded Value="True"/>
    467467      </Unit48>
     
    469469        <Filename Value="../Units/GenericBitmap.pas"/>
    470470        <UnitName Value="GenericBitmap"/>
    471         <EditorIndex Value="7"/>
     471        <EditorIndex Value="15"/>
    472472        <WindowIndex Value="0"/>
    473473        <TopLine Value="1"/>
    474474        <CursorPos X="15" Y="14"/>
    475         <UsageCount Value="31"/>
     475        <UsageCount Value="32"/>
    476476        <Loaded Value="True"/>
    477477      </Unit49>
     
    550550        <UsageCount Value="28"/>
    551551      </Unit59>
     552      <Unit60>
     553        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/objpas/sysutils/filutilh.inc"/>
     554        <EditorIndex Value="7"/>
     555        <WindowIndex Value="0"/>
     556        <TopLine Value="62"/>
     557        <CursorPos X="3" Y="75"/>
     558        <UsageCount Value="11"/>
     559        <Loaded Value="True"/>
     560      </Unit60>
     561      <Unit61>
     562        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/inc/systemh.inc"/>
     563        <EditorIndex Value="2"/>
     564        <WindowIndex Value="0"/>
     565        <TopLine Value="1027"/>
     566        <CursorPos X="11" Y="1040"/>
     567        <UsageCount Value="11"/>
     568        <Loaded Value="True"/>
     569      </Unit61>
     570      <Unit62>
     571        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/win/sysutils.pp"/>
     572        <UnitName Value="sysutils"/>
     573        <EditorIndex Value="8"/>
     574        <WindowIndex Value="0"/>
     575        <TopLine Value="300"/>
     576        <CursorPos X="1" Y="302"/>
     577        <UsageCount Value="11"/>
     578        <Loaded Value="True"/>
     579      </Unit62>
     580      <Unit63>
     581        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/win/wininc/func.inc"/>
     582        <EditorIndex Value="9"/>
     583        <WindowIndex Value="0"/>
     584        <TopLine Value="169"/>
     585        <CursorPos X="15" Y="177"/>
     586        <UsageCount Value="11"/>
     587        <Loaded Value="True"/>
     588      </Unit63>
     589      <Unit64>
     590        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/inc/file.inc"/>
     591        <EditorIndex Value="4"/>
     592        <WindowIndex Value="0"/>
     593        <TopLine Value="299"/>
     594        <CursorPos X="3" Y="304"/>
     595        <UsageCount Value="11"/>
     596        <Loaded Value="True"/>
     597      </Unit64>
     598      <Unit65>
     599        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/win/sysfile.inc"/>
     600        <EditorIndex Value="5"/>
     601        <WindowIndex Value="0"/>
     602        <TopLine Value="133"/>
     603        <CursorPos X="11" Y="143"/>
     604        <UsageCount Value="11"/>
     605        <Loaded Value="True"/>
     606      </Unit65>
     607      <Unit66>
     608        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/win/sysos.inc"/>
     609        <EditorIndex Value="6"/>
     610        <WindowIndex Value="0"/>
     611        <TopLine Value="250"/>
     612        <CursorPos X="20" Y="268"/>
     613        <UsageCount Value="11"/>
     614        <Loaded Value="True"/>
     615      </Unit66>
     616      <Unit67>
     617        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/inc/text.inc"/>
     618        <EditorIndex Value="3"/>
     619        <WindowIndex Value="0"/>
     620        <TopLine Value="108"/>
     621        <CursorPos X="3" Y="110"/>
     622        <UsageCount Value="10"/>
     623        <Loaded Value="True"/>
     624      </Unit67>
    552625    </Units>
    553626    <JumpHistory Count="30" HistoryIndex="29">
    554627      <Position1>
    555         <Filename Value="../Units/GenericMatrix.pas"/>
    556         <Caret Line="71" Column="45" TopLine="57"/>
     628        <Filename Value="../Units/GenericList.pas"/>
     629        <Caret Line="744" Column="17" TopLine="737"/>
    557630      </Position1>
    558631      <Position2>
    559         <Filename Value="../Units/GenericMatrix.pas"/>
    560         <Caret Line="77" Column="43" TopLine="64"/>
     632        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/inc/file.inc"/>
     633        <Caret Line="304" Column="3" TopLine="299"/>
    561634      </Position2>
    562635      <Position3>
    563         <Filename Value="../Units/GenericMatrix.pas"/>
    564         <Caret Line="87" Column="47" TopLine="74"/>
     636        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/win/sysfile.inc"/>
     637        <Caret Line="173" Column="10" TopLine="160"/>
    565638      </Position3>
    566639      <Position4>
    567         <Filename Value="../Units/GenericMatrix.pas"/>
    568         <Caret Line="89" Column="62" TopLine="76"/>
     640        <Filename Value="../../../../../Lazarus/1.1_2.7.1/fpc/2.7.1/source/rtl/win/sysfile.inc"/>
     641        <Caret Line="143" Column="11" TopLine="133"/>
    569642      </Position4>
    570643      <Position5>
    571         <Filename Value="../Units/GenericMatrix.pas"/>
    572         <Caret Line="93" Column="59" TopLine="80"/>
     644        <Filename Value="../Units/GenericList.pas"/>
     645        <Caret Line="26" Column="29" TopLine="12"/>
    573646      </Position5>
    574647      <Position6>
    575         <Filename Value="../Units/GenericMatrix.pas"/>
    576         <Caret Line="94" Column="61" TopLine="81"/>
     648        <Filename Value="../Units/GenericList.pas"/>
     649        <Caret Line="732" Column="24" TopLine="727"/>
    577650      </Position6>
    578651      <Position7>
    579         <Filename Value="../Units/GenericMatrix.pas"/>
    580         <Caret Line="124" Column="73" TopLine="111"/>
     652        <Filename Value="../Units/GenericList.pas"/>
     653        <Caret Line="23" Column="54" TopLine="12"/>
    581654      </Position7>
    582655      <Position8>
    583         <Filename Value="../Units/GenericMatrix.pas"/>
    584         <Caret Line="140" Column="71" TopLine="127"/>
     656        <Filename Value="../Units/GenericList.pas"/>
     657        <Caret Line="57" Column="1" TopLine="41"/>
    585658      </Position8>
    586659      <Position9>
    587         <Filename Value="../Units/GenericMatrix.pas"/>
    588         <Caret Line="223" Column="57" TopLine="210"/>
     660        <Filename Value="../Units/GenericList.pas"/>
     661        <Caret Line="324" Column="1" TopLine="311"/>
    589662      </Position9>
    590663      <Position10>
    591         <Filename Value="../Units/GenericMatrix.pas"/>
    592         <Caret Line="311" Column="74" TopLine="298"/>
     664        <Filename Value="../Units/GenericList.pas"/>
     665        <Caret Line="686" Column="6" TopLine="673"/>
    593666      </Position10>
    594667      <Position11>
    595         <Filename Value="../Units/GenericMatrix.pas"/>
    596         <Caret Line="323" Column="59" TopLine="310"/>
     668        <Filename Value="../Units/GenericList.pas"/>
     669        <Caret Line="694" Column="6" TopLine="681"/>
    597670      </Position11>
    598671      <Position12>
    599         <Filename Value="../Units/GenericMatrix.pas"/>
    600         <Caret Line="431" Column="55" TopLine="418"/>
     672        <Filename Value="../Units/GenericList.pas"/>
     673        <Caret Line="702" Column="6" TopLine="689"/>
    601674      </Position12>
    602675      <Position13>
    603         <Filename Value="../Units/GenericBitmap.pas"/>
    604         <Caret Line="14" Column="15" TopLine="1"/>
     676        <Filename Value="../Units/GenericList.pas"/>
     677        <Caret Line="710" Column="6" TopLine="697"/>
    605678      </Position13>
    606679      <Position14>
    607         <Filename Value="../Units/GenericMatrix.pas"/>
    608         <Caret Line="114" Column="55" TopLine="91"/>
     680        <Filename Value="../Units/GenericList.pas"/>
     681        <Caret Line="21" Column="7" TopLine="14"/>
    609682      </Position14>
    610683      <Position15>
    611         <Filename Value="../Units/GenericMatrix.pas"/>
    612         <Caret Line="50" Column="39" TopLine="37"/>
     684        <Filename Value="../Units/GenericList.pas"/>
     685        <Caret Line="746" Column="37" TopLine="734"/>
    613686      </Position15>
    614687      <Position16>
    615         <Filename Value="../Units/GenericMatrix.pas"/>
    616         <Caret Line="114" Column="24" TopLine="94"/>
     688        <Filename Value="../Units/GenericList.pas"/>
     689        <Caret Line="52" Column="1" TopLine="37"/>
    617690      </Position16>
    618691      <Position17>
    619         <Filename Value="../Units/GenericMatrix.pas"/>
    620         <Caret Line="50" Column="40" TopLine="25"/>
     692        <Filename Value="../Units/GenericList.pas"/>
     693        <Caret Line="35" Column="14" TopLine="22"/>
    621694      </Position17>
    622695      <Position18>
    623         <Filename Value="../Units/GenericMatrix.pas"/>
    624         <Caret Line="114" Column="24" TopLine="101"/>
     696        <Filename Value="../Units/GenericList.pas"/>
     697        <Caret Line="716" Column="36" TopLine="715"/>
    625698      </Position18>
    626699      <Position19>
    627         <Filename Value="../Units/GenericMatrix.pas"/>
    628         <Caret Line="50" Column="39" TopLine="37"/>
     700        <Filename Value="../Units/GenericList.pas"/>
     701        <Caret Line="121" Column="1" TopLine="108"/>
    629702      </Position19>
    630703      <Position20>
    631         <Filename Value="../Units/GenericMatrix.pas"/>
    632         <Caret Line="664" Column="1" TopLine="639"/>
     704        <Filename Value="../Units/GenericList.pas"/>
     705        <Caret Line="130" Column="38" TopLine="108"/>
    633706      </Position20>
    634707      <Position21>
    635         <Filename Value="../Units/GenericMatrix.pas"/>
    636         <Caret Line="132" Column="3" TopLine="114"/>
     708        <Filename Value="../Units/GenericList.pas"/>
     709        <Caret Line="769" Column="58" TopLine="765"/>
    637710      </Position21>
    638711      <Position22>
    639         <Filename Value="../Units/GenericMatrix.pas"/>
    640         <Caret Line="114" Column="14" TopLine="106"/>
     712        <Filename Value="../Units/GenericList.pas"/>
     713        <Caret Line="131" Column="70" TopLine="119"/>
    641714      </Position22>
    642715      <Position23>
    643         <Filename Value="../Units/GenericMatrix.pas"/>
    644         <Caret Line="133" Column="15" TopLine="115"/>
     716        <Filename Value="../Units/GenericList.pas"/>
     717        <Caret Line="130" Column="36" TopLine="119"/>
    645718      </Position23>
    646719      <Position24>
    647         <Filename Value="../Units/GenericMatrix.pas"/>
    648         <Caret Line="54" Column="65" TopLine="37"/>
     720        <Filename Value="../Units/GenericList.pas"/>
     721        <Caret Line="771" Column="32" TopLine="765"/>
    649722      </Position24>
    650723      <Position25>
    651         <Filename Value="../Units/GenericMatrix.pas"/>
    652         <Caret Line="50" Column="39" TopLine="37"/>
     724        <Filename Value="../Units/GenericList.pas"/>
     725        <Caret Line="130" Column="15" TopLine="117"/>
    653726      </Position25>
    654727      <Position26>
    655         <Filename Value="../Units/GenericMatrix.pas"/>
    656         <Caret Line="138" Column="50" TopLine="118"/>
     728        <Filename Value="../Units/GenericList.pas"/>
     729        <Caret Line="725" Column="1" TopLine="716"/>
    657730      </Position26>
    658731      <Position27>
    659         <Filename Value="../Units/GenericMatrix.pas"/>
    660         <Caret Line="144" Column="49" TopLine="120"/>
     732        <Filename Value="../Units/GenericList.pas"/>
     733        <Caret Line="778" Column="9" TopLine="757"/>
    661734      </Position27>
    662735      <Position28>
    663         <Filename Value="../Units/GenericMatrix.pas"/>
    664         <Caret Line="134" Column="1" TopLine="122"/>
     736        <Filename Value="../Units/GenericList.pas"/>
     737        <Caret Line="773" Column="29" TopLine="754"/>
    665738      </Position28>
    666739      <Position29>
    667         <Filename Value="../Units/GenericMatrix.pas"/>
    668         <Caret Line="137" Column="41" TopLine="126"/>
     740        <Filename Value="../Units/GenericList.pas"/>
     741        <Caret Line="59" Column="24" TopLine="45"/>
    669742      </Position29>
    670743      <Position30>
    671         <Filename Value="../Units/GenericMatrix.pas"/>
    672         <Caret Line="136" Column="29" TopLine="123"/>
     744        <Filename Value="../Units/GenericList.pas"/>
     745        <Caret Line="35" Column="15" TopLine="23"/>
    673746      </Position30>
    674747    </JumpHistory>
     
    740813    </Exceptions>
    741814  </Debugging>
     815  <EditorMacros Count="0"/>
    742816</CONFIG>
  • Generics/NativeGenerics/Units/GenericList.pas

    r379 r423  
    2020    TFromStringConverter = function(Text: string): TItem;
    2121    TItemArray = array of TItem;
    22   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;
     22  protected
     23    function GetLast: TItem; virtual;
     24    procedure SetLast(const AValue: TItem); virtual;
     25    function GetFirst: TItem; virtual;
     26    procedure SetFirst(const AValue: TItem); virtual;
    2727    function GetCount: TIndex; virtual; abstract;
    2828    procedure SetCount(const AValue: TIndex); virtual; abstract;
     
    3333  public
    3434    constructor Create; virtual;
    35     function Add(Item: TItem): TIndex; virtual; abstract;
     35    procedure Clear; virtual;
     36    function Add(const Item: TItem): TIndex; virtual;
    3637    property Count: TIndex read GetCount write SetCount;
    3738    property Capacity: TIndex read GetCapacity write SetCapacity;
     
    4748    FCount: TIndex;
    4849    FItems: array of TItem;
     50  protected
    4951    function Get(Index: TIndex): TItem; override;
    5052    function GetCapacity: TIndex; override;
    51     function GetFirst: TItem; override;
    52     function GetLast: TItem; override;
    5353    function GetCount: TIndex; override;
    5454    procedure SetCapacity(const AValue: TIndex); override;
    5555    procedure SetCapacityOptimized(const NewCapacity: TIndex);
    5656    procedure SetCount(const AValue: TIndex); override;
    57     procedure SetFirst(AValue: TItem); override;
    58     procedure SetLast(AValue: TItem); override;
    5957    procedure Put(Index: TIndex; const AValue: TItem); override;
    6058    procedure QuickSort(L, R : TIndex; Compare: TSortCompare);
    6159  public
    62     function Add(Item: TItem): TIndex; override;
     60    function Add(const Item: TItem): TIndex; override;
    6361    procedure AddArray(Values: array of TItem);
    6462    procedure AddList(List: TGList<TItem>);
    6563    procedure AddListPart(List: TGList<TItem>; ItemIndex, ItemCount: TIndex);
    6664    procedure Assign(Source: TGList<TItem>); virtual;
    67     procedure Clear; virtual;
    6865    procedure Delete(Index: TIndex); virtual;
    6966    procedure DeleteItems(Index, Count: TIndex);
     
    9592
    9693  TGObjectList<TItem> = class(TGList<TItem>)
    97   private
     94  protected
    9895    procedure Put(Index: Integer; const AValue: TItem); override;
    9996  public
     
    112109    procedure Clear; override;
    113110    procedure Assign(Source: TGList<TItem>); override;
     111    constructor Create; override;
     112    destructor Destroy; override;
     113  end;
     114
     115  { TGFileList }
     116
     117  TGFileList<TItem> = class(TGList<TItem>)
     118  private
     119    FHandle: THandle;
     120  protected
     121    function GetCount: TIndex; override;
     122    procedure SetCount(const AValue: TIndex); override;
     123    procedure SetCapacity(const AValue: TIndex); override;
     124    function GetCapacity: TIndex; override;
     125    function Get(Index: TIndex): TItem; override;
     126    procedure Put(Index: TIndex; const AValue: TItem); override;
     127  public
     128    procedure Open(FileName: string; Mode: Integer);
     129    procedure Close;
    114130    constructor Create;
    115131    destructor Destroy; override;
     
    117133
    118134
     135resourcestring
     136  SListIndexError               = 'List index (%d) out of bounds';
     137  SListCapacityError            = 'List capacity (%d) exceeded.';
     138  SListCountError               = 'List count (%d) out of bounds.';
     139
    119140implementation
    120 
    121 uses
    122   RtlConsts;
    123141
    124142{ TGList<TItem> }
     
    298316end;
    299317
    300 function TGList<TItem>.GetLast: TItem;
    301 begin
    302   if FCount = 0 then
    303     raise EListError.CreateFmt(SListIndexError, [0])
    304   else
    305     Result := FItems[FCount - 1];
    306 end;
    307 
    308318function TGList<TItem>.GetCount: TIndex;
    309319begin
    310320  Result := FCount;
    311 end;
    312 
    313 procedure TGList<TItem>.SetLast(AValue: TItem);
    314 begin
    315   if FCount = 0 then
    316     raise EListError.CreateFmt(SListIndexError, [0])
    317   else
    318     FItems[FCount - 1] := AValue;
    319 end;
    320 
    321 function TGList<TItem>.GetFirst: TItem;
    322 begin
    323   if FCount = 0 then
    324     raise EListError.CreateFmt(SListIndexError, [0])
    325   else
    326     Result := FItems[0];
    327 end;
    328 
    329 procedure TGList<TItem>.SetFirst(AValue: TItem);
    330 begin
    331   if FCount = 0 then
    332     raise EListError.CreateFmt(SListIndexError, [0])
    333   else
    334     FItems[0] := AValue;
    335321end;
    336322
     
    521507end;
    522508
    523 function TGList<TItem>.Add(Item: TItem): TIndex;
     509function TGList<TItem>.Add(const Item: TItem): TIndex;
    524510begin
    525511  Count := Count + 1;
    526512  Result := FCount - 1;
    527   FItems[Result] := Item;
     513  Items[Result] := Item;
    528514end;
    529515
     
    552538    J := J + 1;
    553539  end;
    554 end;
    555 
    556 procedure TGList<TItem>.Clear;
    557 begin
    558   Count := 0;
    559   Capacity := 0;
    560540end;
    561541
     
    690670{ TGAbstractList<TItem> }
    691671
     672function TGAbstractList<TItem>.GetLast: TItem;
     673begin
     674  if Count = 0 then
     675    raise EListError.CreateFmt(SListIndexError, [0])
     676  else
     677    Result := Items[Count - 1];
     678end;
     679
     680procedure TGAbstractList<TItem>.SetLast(const AValue: TItem);
     681begin
     682  if Count = 0 then
     683    raise EListError.CreateFmt(SListIndexError, [0])
     684  else
     685    Items[Count - 1] := AValue;
     686end;
     687
     688function TGAbstractList<TItem>.GetFirst: TItem;
     689begin
     690  if Count = 0 then
     691    raise EListError.CreateFmt(SListIndexError, [0])
     692  else
     693    Result := Items[0];
     694end;
     695
     696procedure TGAbstractList<TItem>.SetFirst(const AValue: TItem);
     697begin
     698  if Count = 0 then
     699    raise EListError.CreateFmt(SListIndexError, [0])
     700  else
     701    Items[0] := AValue;
     702end;
     703
    692704constructor TGAbstractList<TItem>.Create;
    693705begin
    694706end;
    695707
     708procedure TGAbstractList<TItem>.Clear;
     709begin
     710  Count := 0;
     711  Capacity := 0;
     712end;
     713
     714function TGAbstractList<TItem>.Add(const Item: TItem): TIndex;
     715begin
     716  Count := Count + 1;
     717  Result := Count - 1;
     718  Items[Result] := Item;
     719end;
     720
     721{ TGFileList<TItem> }
     722
     723function TGFileList<TItem>.GetCount: TIndex;
     724var
     725  OldPos: TIndex;
     726begin
     727  OldPos := FileSeek(FHandle, 0, 1);
     728  Result := FileSeek(FHandle, 0, 2);
     729  FileSeek(FHandle, OldPos, 0);
     730end;
     731
     732procedure TGFileList<TItem>.SetCount(const AValue: TIndex);
     733begin
     734  FileTruncate(FHandle, AValue);
     735end;
     736
     737procedure TGFileList<TItem>.SetCapacity(const AValue: TIndex);
     738begin
     739  inherited SetCapacity(AValue);
     740end;
     741
     742function TGFileList<TItem>.GetCapacity: TIndex;
     743begin
     744  Result := inherited GetCapacity;
     745end;
     746
     747function TGFileList<TItem>.Get(Index: TIndex): TItem;
     748begin
     749  FileSeek(FHandle, Index, 0);
     750  FileRead(FHandle, Result, SizeOf(Result));
     751end;
     752
     753procedure TGFileList<TItem>.Put(Index: TIndex; const AValue: TItem);
     754begin
     755  FileSeek(FHandle, Index, 0);
     756  FileWrite(FHandle, AValue, SizeOf(AValue));
     757end;
     758
     759procedure TGFileList<TItem>.Open(FileName: string; Mode: Integer);
     760begin
     761  Close;
     762  if Mode = fmCreate then FHandle := FileCreate(FileName, Mode)
     763    else FileOpen(FileName, Mode);
     764end;
     765
     766procedure TGFileList<TItem>.Close;
     767begin
     768  if FHandle <> feInvalidHandle then FileClose(FHandle);
     769end;
     770
     771constructor TGFileList<TItem>.Create;
     772begin
     773  FHandle := feInvalidHandle;
     774end;
     775
     776destructor TGFileList<TItem>.Destroy;
     777begin
     778  Close;
     779  inherited;
     780end;
     781
    696782end.
  • Generics/NativeGenerics/Units/GenericMatrix.pas

    r379 r423  
    8585    function Implode(RowSeparator, ColSeparator: string; Converter: TToStringConverter): string;
    8686    procedure Explode(Text, Separator: string; Converter: TFromStringConverter; SlicesCount: Integer = -1);
    87     function IndexOf(Item: TItem; Start: TIndex = 0): TIndex;
    88     function IndexOfList(List: TGMatrix<TItem>; Start: TIndex = 0): TIndex;
     87    function IndexOf(Item: TItem; Start: TIndex): TIndex;
     88    function IndexOfList(List: TGMatrix<TItem>; Start: TIndex): TIndex;
    8989    procedure Insert(Index: TIndex; Item: TItem);
    9090    procedure InsertList(Index: TIndex; List: TGMatrix<TItem>);
  • Generics/NativeGenerics/Units/GenericString.pas

    r324 r423  
    2929begin
    3030  for I := 0 to Count - 1 do
    31     if (Items[I] in ['a'..'z']) then
     31    if (Items[I] >= 'a') and (Items[I] <= 'z') then
    3232      Items[I] := Char(Byte(Items[I]) - 32);
    3333end;
     
    3838begin
    3939  for I := 0 to Count - 1 do
    40     if (Items[I] in ['A'..'Z']) then
     40    if (Items[I] >= 'A') and (Items[I] <= 'Z') then
    4141      Items[I] := Char(Byte(Items[I]) + 32);
    4242end;
Note: See TracChangeset for help on using the changeset viewer.