diff --git a/src/shared/utils.pas b/src/shared/utils.pas
index f61035e5c4ac6a6fbf736df86b64e53901c4550e..d8b6e85c266dcf6fb2142759b53e8b5e35e913aa 100644 (file)
--- a/src/shared/utils.pas
+++ b/src/shared/utils.pas
TFormatStrFCallback = procedure (constref buf; len: SizeUInt);
// returns formatted string if `writerCB` is `nil`, empty string otherwise
-function formatstrf (const fmt: AnsiString; args: array of const; writerCB: TFormatStrFCallback=nil): AnsiString;
+function formatstrf (const fmt: AnsiString; const args: array of const; writerCB: TFormatStrFCallback=nil): AnsiString;
function wchar2win (wc: WideChar): AnsiChar; inline;
function utf2win (const s: AnsiString): AnsiString;
procedure clear (); inline;
procedure append (constref it: ItemT); inline;
+ procedure delete (idx: Integer); inline;
+ function remove (idx: Integer): ItemT; inline;
public
property count: Integer read mCount;
procedure TSimpleList.append (constref it: ItemT); inline;
+var
+ newsz: Integer;
begin
- if (mCount = Length(mItems)) then
+ if (mCount >= Length(mItems)) then
begin
- if (mCount = 0) then SetLength(mItems, 128) else SetLength(mItems, mCount*2);
+ newsz := mCount+(mCount div 3)+128;
+ SetLength(mItems, newsz);
end;
mItems[mCount] := it;
Inc(mCount);
end;
+procedure TSimpleList.delete (idx: Integer); inline;
+var
+ f: Integer;
+begin
+ if (idx >= 0) and (idx < mCount) then
+ begin
+ for f := idx+1 to mCount-1 do mItems[f-1] := mItems[f];
+ end;
+end;
+
+
+function TSimpleList.remove (idx: Integer): ItemT; inline;
+var
+ f: Integer;
+begin
+ if (idx >= 0) and (idx < mCount) then
+ begin
+ result := mItems[idx];
+ for f := idx+1 to mCount-1 do mItems[f-1] := mItems[f];
+ end
+ else
+ begin
+ result := Default(ItemT);
+ end;
+end;
+
+
// ////////////////////////////////////////////////////////////////////////// //
var
wc2shitmap: array[0..65535] of AnsiChar;
*)
-function formatstrf (const fmt: AnsiString; args: array of const; writerCB: TFormatStrFCallback=nil): AnsiString;
+function formatstrf (const fmt: AnsiString; const args: array of const; writerCB: TFormatStrFCallback=nil): AnsiString;
const
PadSpaces: AnsiString = ' ';
PadZeroes: AnsiString = '00000000000000000000000000000000000000000000000000000000000000000000000';