Diff.st
branchjv
changeset 17132 17d361c666c2
parent 12807 ba8c5416aa28
parent 16884 5537c231bbba
equal deleted inserted replaced
16869:2ecababdd4c0 17132:17d361c666c2
       
     1 "{ Encoding: utf8 }"
       
     2 
     1 "
     3 "
     2  Copyright (c) 2007-2010 Jan Vrany, SWING Research Group, Czech Technical University in Prague
     4  Copyright (c) 2007-2010 Jan Vrany, SWING Research Group, Czech Technical University in Prague
     3  Copyright (c) 2009-2010 eXept Software AG
     5  Copyright (c) 2009-2010 eXept Software AG
     4 
     6 
     5  Permission is hereby granted, free of charge, to any person
     7  Permission is hereby granted, free of charge, to any person
    23  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    25  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    24  OTHER DEALINGS IN THE SOFTWARE.
    26  OTHER DEALINGS IN THE SOFTWARE.
    25 "
    27 "
    26 "{ Package: 'stx:libtool' }"
    28 "{ Package: 'stx:libtool' }"
    27 
    29 
       
    30 "{ NameSpace: Smalltalk }"
       
    31 
    28 Object subclass:#Diff
    32 Object subclass:#Diff
    29 	instanceVariableNames:'equivMax heuristic nodiscards xvec yvec fdiag bdiag fdiagoff
    33 	instanceVariableNames:'equivMax heuristic nodiscards xvec yvec fdiag bdiag fdiagoff
    30 		bdiagoff filevec cost snakeLimit inhibit'
    34 		bdiagoff filevec cost snakeLimit inhibit'
    31 	classVariableNames:''
    35 	classVariableNames:''
    32 	poolDictionaries:''
    36 	poolDictionaries:''
   118 "
   122 "
   119 !
   123 !
   120 
   124 
   121 documentation_czech
   125 documentation_czech
   122     "
   126     "
   123 první fáze:
   127 prvnĂ­ fĂĄze:
   124 #############################################################################################################################
   128 #############################################################################################################################
   125 first := #('prvni' 'druhy' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
   129 first := #('prvni' 'druhy' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
   126 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
   130 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
   127 ############################################################################################################################
   131 ############################################################################################################################
   128 First a second představujou dvě pole, které chceme porovnávat. Jednotlivé položky v poli si lze představit jako řádky, případně jako slova v řádku.
   132 First a second pøedstavujou dvì pole, které chceme porovnávat. Jednotlivé položky v poli si lze pøedstavit jako øádky, pøípadnì jako slova v øádku.
   129 Podle toho, co je potřeba porovnávat.
   133 Podle toho, co je potøeba porovnåvat.
   130 
   134 
   131 *****************************************************************************************************************************
   135 *****************************************************************************************************************************
   132 diff := FelDiff new felDiff.
   136 diff := FelDiff new felDiff.
   133 *****************************************************************************************************************************
   137 *****************************************************************************************************************************
   134 Zde probíhá inicializace defaultníh proměnných. Funguje to jako konstruktor.
   138 Zde probíhå inicializace defaultníh promÏnných. Funguje to jako konstruktor.
   135 
   139 
   136 ############################################################################################################################
   140 ############################################################################################################################
   137 diff diff: first b: second
   141 diff diff: first b: second
   138 ############################################################################################################################
   142 ############################################################################################################################
   139 První fáze nutná pro porovnávání polí.  Vzniknou dvě instance tříde filedata uložené do pole. Tyto instance budou obsahovat následující údaje:
   143 První fáze nutná pro porovnávání polí.  Vzniknou dvì instance tøíde filedata uložené do pole. Tyto instance budou obsahovat následující údaje:
   140 
   144 
   141 filevec[1].equivs=#(1 2 3 3 4 5 6)
   145 filevec[1].equivs=#(1 2 3 3 4 5 6)
   142 filevec[1].bufferedLines=7
   146 filevec[1].bufferedLines=7
   143 filevec[1].changedFlag=#()
   147 filevec[1].changedFlag=#()
   144 
   148 
   145 filevec[2].equivs=#(1 3 6 7 3 8 9 10 10 11 12 13 14 15 10 10)
   149 filevec[2].equivs=#(1 3 6 7 3 8 9 10 10 11 12 13 14 15 10 10)
   146 filevec[2].bufferedLines=16
   150 filevec[2].bufferedLines=16
   147 filevec[2].changedFlag=#()
   151 filevec[2].changedFlag=#()
   148 
   152 
   149 V zásadě se vytvořila structura Dictionary, která jednotlivé řádky(slova) převedla na čísla. Pole equvs pak představuje číselně slova(řádky).
   153 V zåsadÏ se vytvoøila structura Dictionary, kterå jednotlivÊ øådky(slova) pøevedla na èísla. Pole equvs pak pøedstavuje èíselnÏ slova(øådky).
   150 čísla, která se nalézají v obou dbou polí equivs značí, že soubory sdílí alespoň nějaké slovo(řádek).
   154 èísla, která se nalézají v obou dbou polí equivs znaèí, že soubory sdílí alespoò nìjaké slovo(øádek).
   151 
   155 
   152 *****************************************************************************************************************************
   156 *****************************************************************************************************************************
   153 change:= diff diff2: true.
   157 change:= diff diff2: true.
   154 *****************************************************************************************************************************
   158 *****************************************************************************************************************************
   155 
   159 
   156 Zde již dochází k porovnání obou dvou polí s řádky(slovy). Lze si vybrat mezi forwardscriptem a reversescriptem. 
   160 Zde již dochází k porovnání obou dvou polí s øádky(slovy). Lze si vybrat mezi forwardscriptem a reversescriptem. 
   157 
   161 
   158 1) metoda discardconfusinglines
   162 1) metoda discardconfusinglines
   159 výsledek:
   163 výsledek:
   160 filevec[1].undiscardeded=#(1 3 3 5 6 0 0)
   164 filevec[1].undiscardeded=#(1 3 3 5 6 0 0)
   161 filevec[1].realIndexes=  #(0 2 3 5 6 0 0)
   165 filevec[1].realIndexes=  #(0 2 3 5 6 0 0)
   162 filevec[1].nondiscardedLines=5
   166 filevec[1].nondiscardedLines=5
   163 filevec[1].changedFlag=#(false false true false false true false false false)
   167 filevec[1].changedFlag=#(false false true false false true false false false)
   164 
   168 
   165 filevec[2].undiscardeded=#(1 3 5 6 3 0 0 0 0 0 0 0 0 0 0 0)
   169 filevec[2].undiscardeded=#(1 3 5 6 3 0 0 0 0 0 0 0 0 0 0 0)
   166 filevec[2].realIndexes=  #(0 1 2 3 4 0 0 0 0 0 0 0 0 0 0 0)
   170 filevec[2].realIndexes=  #(0 1 2 3 4 0 0 0 0 0 0 0 0 0 0 0)
   167 filevec[2].nondiscardedLines=5
   171 filevec[2].nondiscardedLines=5
   168 
   172 
   169 Undiscarded- Řádky soubory, které jsou shodné.
   173 Undiscarded- Øådky soubory, kterÊ jsou shodnÊ.
   170 RealIndexes     - indexy řádků v poli(je potřeba přičíst jedna)
   174 RealIndexes     - indexy øådkÚ v poli(je potøeba pøièíst jedna)
   171                         - to znamená že index prvního 3->3 pozice v prvním vstupním poli
   175                         - to znamená že index prvního 3->3 pozice v prvním vstupním poli
   172                         - index druhého 3->2 pozice v druhém vstupním poli a 3->5 pozice v druhém vstupním poli 
   176                         - index druhĂŠho 3->2 pozice v druhĂŠm vstupnĂ­m poli a 3->5 pozice v druhĂŠm vstupnĂ­m poli 
   173 NondiscardedLines- značí kolik čádků(slov) je shodných v obou polích.
   177 NondiscardedLines- znaèí kolik èådkÚ(slov) je shodných v obou polích.
   174 
   178 
   175 2)Následuje porovnávání jednotlivých polí a vytvoření výsledku
   179 2)Nåsleduje porovnåvåní jednotlivých polí a vytvoøení výsledku
   176 
   180 
   177 3)Výsledek Reverse skript
   181 3)Výsledek Reverse skript
   178 
   182 
   179 inserted=12('treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa')
   183 inserted=12('treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa')
   180 deleted=0
   184 deleted=0
   181 line0=7('ruzovy')
   185 line0=7('ruzovy')
   182 line1=4('ruzovy')
   186 line1=4('ruzovy')
   183 link=next
   187 link=next
   184 
   188 
   185 inserted- kolik znaků bylo vloženo
   189 inserted- kolik znakù bylo vloženo
   186 deleted - kolik znaků bylo smazáno
   190 deleted - kolik znakĂš bylo smazĂĄno
   187 line0 - pořadí znaku za kterým bylo něco vloženo(smazáno) v prvním poli(poslední znak který je shodný v obou polích)
   191 line0 - poøadí znaku za kterým bylo nìco vloženo(smazáno) v prvním poli(poslední znak který je shodný v obou polích)
   188 line1 - pořadí znaku za kterým bylo něco smazáno(vloženo) v prvním poli(poslední znak který je shodný v obou polích)
   192 line1 - poøadí znaku za kterým bylo nìco smazáno(vloženo) v prvním poli(poslední znak který je shodný v obou polích)
   189 
   193 
   190 Takže po znaku na pozici 4, je 12 vložených znaků oproti prvnímu 
   194 Takže po znaku na pozici 4, je 12 vložených znakù oproti prvnímu 
   191 
   195 
   192 Zbytek pole vypadá takto:
   196 Zbytek pole vypadĂĄ takto:
   193 
   197 
   194 first := #('prvni' 'druhy' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
   198 first := #('prvni' 'druhy' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
   195 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
   199 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
   196 
   200 
   197 link není null a tudíž odkazuje na další informace o změnách.
   201 link není null a tudíž odkazuje na další informace o zmìnách.
   198 inserted=0
   202 inserted=0
   199 deleted=2('treti' 'paty')
   203 deleted=2('treti' 'paty')
   200 line0=3('treti')
   204 line0=3('treti')
   201 line1=2('treti')
   205 line1=2('treti')
   202 link=next
   206 link=next
   203 
   207 
   204 zbytek pole vypadá takto:
   208 zbytek pole vypadĂĄ takto:
   205 first := #('prvni' 'druhy' 'treti' 'zeleny' 'ruzovy' ).
   209 first := #('prvni' 'druhy' 'treti' 'zeleny' 'ruzovy' ).
   206 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
   210 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
   207 
   211 
   208 link není null a tudíž odkazuje na další informace o změnách.
   212 link není null a tudíž odkazuje na další informace o zmìnách.
   209 inserted=0
   213 inserted=0
   210 deleted=1('druhy')
   214 deleted=1('druhy')
   211 line0=1('prvni')
   215 line0=1('prvni')
   212 line1=1('prvni')
   216 line1=1('prvni')
   213 link=nil
   217 link=nil
   214 
   218 
   215 zbytek pole vypadá takto:
   219 zbytek pole vypadĂĄ takto:
   216 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
   220 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
   217 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
   221 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
   218 
   222 
   219 link je nil. Neexistuje žádná změna a tato pole jsou shodná.
   223 link je nil. Neexistuje žádná zmìna a tato pole jsou shodná.
   220 
   224 
   221 4)Výsledek Forward skript
   225 4)Výsledek Forward skript
   222 
   226 
   223 inserted=0
   227 inserted=0
   224 deleted=1('druhy')
   228 deleted=1('druhy')
   225 line0=1('prvni')
   229 line0=1('prvni')
   226 line1=1('prvni')
   230 line1=1('prvni')
   227 link=next
   231 link=next
   228 
   232 
   229 zbytek pole vypadá takto:
   233 zbytek pole vypadĂĄ takto:
   230 first :=  #('prvni' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
   234 first :=  #('prvni' 'treti' 'treti' 'paty' 'zeleny' 'ruzovy' ).
   231 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
   235 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
   232 
   236 
   233 link není nil jdeme na odkaz:
   237 link nenĂ­ nil jdeme na odkaz:
   234 inserted=0
   238 inserted=0
   235 deleted=2('treti' 'paty')
   239 deleted=2('treti' 'paty')
   236 line0=3('treti')
   240 line0=3('treti')
   237 line1=2('treti')
   241 line1=2('treti')
   238 link=next
   242 link=next
   239 
   243 
   240 zbytek pole vypadá takto:
   244 zbytek pole vypadĂĄ takto:
   241 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
   245 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
   242 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
   246 second := #('prvni' 'treti' 'zeleny' 'ruzovy' 'treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa' ).
   243 
   247 
   244 link není nil jdeme na odkaz:
   248 link nenĂ­ nil jdeme na odkaz:
   245 
   249 
   246 inserted=12('treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa')
   250 inserted=12('treti' 'bbb' 'ccc' 'aaa' 'aaa' 'hhh' 'iii' 'mmm' 'nnn' 'ppp' 'aaa' 'aaa')
   247 deleted=0
   251 deleted=0
   248 line0=7('ruzovy')
   252 line0=7('ruzovy')
   249 line1=4('ruzovy')
   253 line1=4('ruzovy')
   250 link=nil
   254 link=nil
   251 
   255 
   252 zbytek pole vypadá takto:
   256 zbytek pole vypadĂĄ takto:
   253 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
   257 first :=  #('prvni' 'treti' 'zeleny' 'ruzovy' ).
   254 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
   258 second := #('prvni' 'treti' 'zeleny' 'ruzovy').
   255 
   259 
   256 Konec
   260 Konec
   257 "
   261 "
   382     "konstruktor"
   386     "konstruktor"
   383     
   387     
   384     equivMax := 1.
   388     equivMax := 1.
   385     heuristic := false.
   389     heuristic := false.
   386     nodiscards := false.
   390     nodiscards := false.
   387     xvec := Array new.
   391     xvec := #().
   388     yvec := Array new.
   392     yvec := #().
   389     fdiag := Array new.
   393     fdiag := #().
   390     bdiag := Array new.
   394     bdiag := #().
   391     filevec := Array new:2.
   395     filevec := Array new:2.
   392     snakeLimit := 20.
   396     snakeLimit := 20.
   393     inhibit := false.
   397     inhibit := false.
   394 
   398 
   395     "Modified: / 16-02-2010 / 22:51:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   399     "Modified: / 16-02-2010 / 22:51:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   912     "Modified: / 12-02-2010 / 13:56:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   916     "Modified: / 12-02-2010 / 13:56:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   913 !
   917 !
   914 
   918 
   915 fileData
   919 fileData
   916 "konstruktor"
   920 "konstruktor"
   917     equivs := Array new.
   921     equivs := #().
   918     undiscarded := Array new.
   922     undiscarded := #().
   919     realindexes := Array new.
   923     realindexes := #().
   920     nondiscardedLines := 0.
   924     nondiscardedLines := 0.
   921     changedFlag := Array new.
   925     changedFlag := #().
   922 !
   926 !
   923 
   927 
   924 fileData: data hashTable: h felDiff:fellDiffClass
   928 fileData: data hashTable: h felDiff:fellDiffClass
   925     | i size ir|
   929     | i size ir|
   926     bufferedLines := data size.
   930     bufferedLines := data size.
  1240 ! !
  1244 ! !
  1241 
  1245 
  1242 !Diff class methodsFor:'documentation'!
  1246 !Diff class methodsFor:'documentation'!
  1243 
  1247 
  1244 version_CVS
  1248 version_CVS
  1245     ^ '$Header: /cvs/stx/stx/libtool/Diff.st,v 1.4 2013-04-19 09:39:05 cg Exp $'
  1249     ^ '$Header$'
  1246 !
  1250 !
  1247 
  1251 
  1248 version_HG
  1252 version_HG
  1249 
  1253 
  1250     ^ '$Changeset: <not expanded> $'
  1254     ^ '$Changeset: <not expanded> $'
  1251 !
  1255 !
  1252 
  1256 
  1253 version_SVN
  1257 version_SVN
  1254     ^ '§Id: Diff.st 7567 2010-04-17 10:59:53Z vranyj1 §'
  1258     ^ '$Id$'
  1255 ! !
  1259 ! !
  1256 
  1260