Changeset 60


Ignore:
Timestamp:
Dec 9, 2021, 12:07:42 AM (3 years ago)
Author:
chronos
Message:
  • Modified: Optimized encoding/decoding of escaped strings.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/UContact.pas

    r59 r60  
    280280begin
    281281  Result := Copy(Text, Length(Text) - Length(What) + 1, MaxInt) = What;
    282   if Result then begin
    283     Result := Result;
    284   end;
    285282end;
    286283
     
    288285var
    289286  I: Integer;
     287  O: Integer;
    290288begin
    291289  Result := '';
    292290  I := 1;
     291  O := 1;
     292  SetLength(Result, Length(Text)); // Preallocate string
    293293  while I <= Length(Text) do begin
    294     if Text[I] in [',', '\', ';'] then Result := Result + '\' + Text[I]
    295       else Result := Result + Text[I];
     294    if Text[I] in [',', '\', ';'] then begin
     295        Result[O] := '\';
     296        Inc(O);
     297        Result[O] := Text[I];
     298        SetLength(Result, Length(Result) + 1);
     299        Inc(O);
     300      end else begin
     301        Result[O] := Text[I];
     302        Inc(O);
     303      end;
    296304    Inc(I);
    297305  end;
     306  SetLength(Result, O - 1);
    298307end;
    299308
     
    301310var
    302311  I: Integer;
     312  O: Integer;
    303313  Escaped: Boolean;
    304314begin
    305315  Result := '';
    306316  I := 1;
     317  O := 1;
    307318  Escaped := False;
     319  SetLength(Result, Length(Text)); // Preallocate string
    308320  while I <= Length(Text) do begin
    309321    if Escaped then begin
    310       Result := Result + Text[I];
     322      Result[O] := Text[I];
     323      Inc(O);
    311324      Escaped := False;
    312325    end else begin
    313326      if Text[I] = '\' then begin
    314327        Escaped := True;
    315       end else Result := Result + Text[I];
     328      end else begin
     329        Result[O] := Text[I];
     330        Inc(O);
     331      end;
    316332    end;
    317333    Inc(I);
    318334  end;
     335  SetLength(Result, O - 1);
    319336end;
    320337
     
    901918          NewProperty.Attributes.Delete(0);
    902919        end;
    903         NewProperty.Value := DecodeEscaped(Value);
     920        NewProperty.Value := Value;
    904921        NewProperty.EvaluateAttributes;
    905922      end else begin
Note: See TracChangeset for help on using the changeset viewer.