AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Unterschiede von quellcode-versionen erkenne?
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschiede von quellcode-versionen erkenne?

Ein Thema von Sharky · begonnen am 28. Jul 2005 · letzter Beitrag vom 9. Aug 2005
Antwort Antwort
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Re: Unterschiede von quellcode-versionen erkenne?

  Alt 29. Jul 2005, 11:20
Konnte nicht umhin mal was zu schreiben (ist fast Wochenende und ich hatte etwas Zeit...)

Hier der relevante Code, funktioniert durch Auffinden des längsten übereinstimmenden Blocks und rekursives Fortfahren in den Teilen davor und danach (hat also eine gewisse Ähnlichkeit mit QuickSort):
Delphi-Quellcode:
procedure DiffRange(l1a, l1e, l2a, l2e: integer);
var
  l1s, l2s, maxm, bp1, bp2, bsz, scan, idx, pos, cnt: integer;
begin
  while true do
  begin
   l1s := l1e - l1a;
   l2s := l2e - l2a;
   if l1s > l2s then
     maxm := l2s
   else
     maxm := l1s;

   if maxm = 0 then
     break;

   bp1 := -1;
   bp2 := -1;
   bsz := 0;

   scan := l1a;
   while scan < l1e - bsz do
   begin
     idx := HashToRange(Info1.LineHash[scan], Info2.Count);
     repeat
      pos := Info2.HashLine[idx];
      if pos < l2a then
        break;

      if pos + bsz <= l2e then
      begin
        cnt := SameLines(scan, l1e, pos, l2e);

        if cnt = bsz then
         if DistanceLess(l1a, l1e, l2a, l2e, bp1, bp2, scan, pos) then
           dec(bsz);

        if cnt > bsz then
        begin
         bsz := cnt;
         bp1 := scan;
         bp2 := pos;
        end;
      end;

      idx := Info2.HashColl[idx];
     until idx < 0;

     if bsz > FHeuristic then break;
     if bsz + bsz >= maxm then break;

     inc(scan);
   end;

   if bsz = 0 then
     break;

   DiffRange(l1a, bp1, l2a, bp2);
   l1a := bp1 + bsz;
   l2a := bp2 + bsz;
  end;

  AddDiff(l1a, l1e, l2a, l2e);
end;
Das ist jetzt mal so in 2 Stunden heruntergehauen, hat bestimmt noch einiges an Optimierungspotential (und auch Kommentierungsbedarf )

[Edit]

Neue Version hochgespielt: 0.2 (und ich hatte noch absolute Pfade von meinem Rechner als Vorgabe in den Edit-Felder )
Angehängte Dateien
Dateityp: zip pascal_diff_0.2_357.zip (6,3 KB, 7x aufgerufen)
Volker
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz