All pastes #40757 Raw Edit

Mine

public text v1 · immutable
#40757 ·published 2006-02-08 17:54 UTC
rendered paste body
function ApplyPatch(OldData, Patch: String): String;
var
  OldStream, PatchStream, NewStream: TMemoryStream;
  X: Integer;
begin
  OldStream := StringToStream(OldData);
  PatchStream := StringToStream(Patch);

  WriteLn(Format('Patch verification: %s', [StreamToString(PatchStream)]));
  WriteLn(Format('Patch verification: %s', [StreamToString(PatchStream)]));
  
  NewStream := TMemoryStream.Create;
  try
    bpatch_(OldStream, NewStream, PatchStream);
    Result := StreamToString(NewStream);
  finally
    FreeAndNil(OldStream);
    FreeAndNil(PatchStream);
    FreeAndNil(NewStream);
  end;
end;

function StringToStream(Value: String): TMemoryStream;
begin
  Result := TMemoryStream.Create;
  Result.WriteBuffer(Value[1], Length(Value));
  Result.Position := 0;
end;

function StreamToString(Stream: TStream): String;
var
  OldPos: Int64;
begin
  SetLength(Result, Stream.Size);
  OldPos := Stream.Position;
  Stream.Position := 0;
  Stream.WriteBuffer(Result[1], Length(Result));
  Stream.Position := OldPos;
end;