| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | program teststrings;{$mode objfpc}{$h+}Uses classes,sysutils;Procedure DoRef (P : Pointer);Type PLongint = ^Longint;begin  If P=Nil then    Writeln ('(Ref : Empty string)')  else{$ifdef fpc}    Writeln (' (Ref: ',Plongint(Longint(P)-4)^,',Len: ',PLongint(Longint(P)-8)^,')');{$else}    Writeln (' (Ref: ',Plongint(Longint(P)-8)^,',Len: ',PLongint(Longint(P)-4)^,')');{$endif}end;Procedure test;var S,TS : ANsiSTring;    T : TStringList;    I,J : Longint;    A : String[255];begin  S:='An Ansi string ';  T:=TStringList.create;  Writeln ('Count : ',T.Count,' Capacity : ',T.Capacity);  For I:=1 to 10 do    begin    str (I,TS);    T.Add(S+TS);    end;  Writeln ('Count : ',T.Count,' Capacity : ',T.Capacity);  J:=T.Count-1;  Writeln ('J : ',J);  For I:=0 to J do    Writeln(I,'/',J,' : ',T.Strings[I]);  T.SaveToFile ('strings.dat');  T.Clear;  T.LoadFromFile('strings.dat');  J:=T.Count-1;  Writeln ('Count = ',J);  For I:=0 to J do    Writeln(I,'/',J,' : ',T.Strings[I]);  Writeln ('IndexOf(''An Ansi string 6'') = ',T.IndexOf('An Ansi string 6'));  Writeln ('IndexOf(''An Ansi string 11'') = ',T.IndexOf('An Ansi string 11'));  T.Clear;  For I:=1 to 10 do    T.Values['Var'+IntToStr(I)]:='Val'+IntToSTr(I);  J:=T.Count-1;  Writeln ('J = ',J);  For I:=0 to J do    Writeln(I,'/',J,' : ',T.Strings[I]);  Writeln ('Indexof(''Var6'') = ',T.IndexOfName('Var6'));  Writeln ('Indexof(''Var13'') = ',T.IndexOfName('Var13'));  Writeln ('Value[''Var6'']  = ',T.Values['Var6']);  Writeln ('Value[''Var13'']  = ',T.Values['Var13']);  Try    Writeln ('String 100 = ');    S:=T.Strings[100];  except    On e: exception do Writeln ('Caught exception : ',e.message);  end;  T.Free;end;Var Data : longint;    t    : THeapStatus;begin  Data:=getfpcheapstatus.currheapused;  test;  Writeln ('Lost ',getfpcheapstatus.currheapused-data);end.
 |