Skip to content

Commit a4d3a2c

Browse files
sdottakaCopilot
andauthored
Refactor compare engines to write results into DIFFITEM and add FullQuickCompare (#3201)
* Update compare engines to write results into DIFFITEM and add FullQuickCompare * WIP * WIP * WIP * WIP * Update Testing/GoogleTest/TimeSizeCompare/TimeSizeCompare_test.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Src/CompareEngines/ImageCompare.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Src/CompareEngines/BinaryCompare.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 19d179c commit a4d3a2c

24 files changed

+1273
-629
lines changed

Src/CompareEngines/BinaryCompare.cpp

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,9 @@ static int compare_files(const String& file1, const String& file2, const IAborta
6969

7070
/**
7171
* @brief Compare two specified files, byte-by-byte
72-
* @param [in] di Diffitem info.
73-
* @return DIFFCODE
72+
* @param [in,out] di Diffitem info. Results are written to di.diffcode.
7473
*/
75-
int BinaryCompare::CompareFiles(const DIFFITEM &di) const
74+
void BinaryCompare::CompareFiles(DIFFITEM& di) const
7675
{
7776
PathContext files;
7877
m_ctxt.GetComparePaths(di, files);
@@ -90,31 +89,65 @@ int BinaryCompare::CompareFiles(const DIFFITEM &di) const
9089
return DIFFCODE::DIFF;
9190
return compare_files(files[p1], files[p2], m_ctxt.GetAbortable());
9291
};
92+
93+
int result = DIFFCODE::CMPERR;
94+
9395
switch (files.GetSize())
9496
{
9597
case 2:
96-
return cmp(0, 1);
98+
result = cmp(0, 1);
99+
break;
100+
97101
case 3:
98-
unsigned code10 = cmp(1, 0);
99-
unsigned code12 = cmp(1, 2);
100-
unsigned code02 = DIFFCODE::SAME;
101-
if (code10 == DIFFCODE::SAME && code12 == DIFFCODE::SAME)
102-
return DIFFCODE::SAME;
103-
else if (code10 == DIFFCODE::SAME && code12 == DIFFCODE::DIFF)
104-
return DIFFCODE::DIFF | DIFFCODE::DIFF3RDONLY;
105-
else if (code10 == DIFFCODE::DIFF && code12 == DIFFCODE::SAME)
106-
return DIFFCODE::DIFF | DIFFCODE::DIFF1STONLY;
107-
else if (code10 == DIFFCODE::DIFF && code12 == DIFFCODE::DIFF)
108102
{
109-
code02 = cmp(0, 2);
110-
if (code02 == DIFFCODE::SAME)
111-
return DIFFCODE::DIFF | DIFFCODE::DIFF2NDONLY;
103+
unsigned code10 = cmp(1, 0);
104+
unsigned code12 = cmp(1, 2);
105+
unsigned code02 = DIFFCODE::SAME;
106+
// Propagate user aborts from pairwise comparisons
107+
if (code10 == DIFFCODE::CMPABORT || code12 == DIFFCODE::CMPABORT)
108+
{
109+
result = DIFFCODE::CMPABORT;
110+
}
111+
else if (code10 == DIFFCODE::SAME && code12 == DIFFCODE::SAME)
112+
{
113+
result = DIFFCODE::SAME;
114+
}
115+
else if (code10 == DIFFCODE::SAME && code12 == DIFFCODE::DIFF)
116+
{
117+
result = DIFFCODE::DIFF | DIFFCODE::DIFF3RDONLY;
118+
}
119+
else if (code10 == DIFFCODE::DIFF && code12 == DIFFCODE::SAME)
120+
{
121+
result = DIFFCODE::DIFF | DIFFCODE::DIFF1STONLY;
122+
}
123+
else if (code10 == DIFFCODE::DIFF && code12 == DIFFCODE::DIFF)
124+
{
125+
code02 = cmp(0, 2);
126+
if (code02 == DIFFCODE::CMPABORT)
127+
{
128+
result = DIFFCODE::CMPABORT;
129+
}
130+
else if (code02 == DIFFCODE::SAME)
131+
{
132+
result = DIFFCODE::DIFF | DIFFCODE::DIFF2NDONLY;
133+
}
134+
else
135+
{
136+
result = DIFFCODE::DIFF;
137+
}
138+
}
139+
// Propagate comparison errors, but do not override an abort result
140+
if (result != DIFFCODE::CMPABORT &&
141+
(code10 == DIFFCODE::CMPERR || code12 == DIFFCODE::CMPERR || code02 == DIFFCODE::CMPERR))
142+
{
143+
result = DIFFCODE::CMPERR;
144+
}
112145
}
113-
if (code10 == DIFFCODE::CMPERR || code12 == DIFFCODE::CMPERR || code02 == DIFFCODE::CMPERR)
114-
return DIFFCODE::CMPERR;
115-
return DIFFCODE::DIFF;
146+
break;
116147
}
117-
return DIFFCODE::CMPERR;
148+
149+
di.diffcode.diffcode &= ~(DIFFCODE::TEXTFLAGS | DIFFCODE::TYPEFLAGS | DIFFCODE::COMPAREFLAGS | DIFFCODE::COMPAREFLAGS3WAY);
150+
di.diffcode.diffcode |= DIFFCODE::FILE | result;
118151
}
119152

120153
} // namespace CompareEngines

Src/CompareEngines/BinaryCompare.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class BinaryCompare
2020
public:
2121
BinaryCompare(CDiffContext& ctxt) : m_ctxt(ctxt) {}
2222
~BinaryCompare();
23-
int CompareFiles(const DIFFITEM &di) const;
23+
void CompareFiles(DIFFITEM& di) const;
2424
private:
2525
CDiffContext& m_ctxt;
2626
};

Src/CompareEngines/CompareEngines.vcxitems

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<ClInclude Include="$(MSBuildThisFileDirectory)ByteComparator.h" />
1919
<ClInclude Include="$(MSBuildThisFileDirectory)ByteCompare.h" />
2020
<ClInclude Include="$(MSBuildThisFileDirectory)ExistenceCompare.h" />
21+
<ClInclude Include="$(MSBuildThisFileDirectory)FullQuickCompare.h" />
2122
<ClInclude Include="$(MSBuildThisFileDirectory)ImageCompare.h" />
2223
<ClInclude Include="$(MSBuildThisFileDirectory)TimeSizeCompare.h" />
2324
<ClInclude Include="$(MSBuildThisFileDirectory)Wrap_DiffUtils.h" />
@@ -42,6 +43,11 @@
4243
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
4344
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName)2.pch</PrecompiledHeaderOutputFile>
4445
</ClCompile>
46+
<ClCompile Include="$(MSBuildThisFileDirectory)FullQuickCompare.cpp">
47+
<PrecompiledHeader>Use</PrecompiledHeader>
48+
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
49+
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName)2.pch</PrecompiledHeaderOutputFile>
50+
</ClCompile>
4551
<ClCompile Include="$(MSBuildThisFileDirectory)ImageCompare.cpp">
4652
<PrecompiledHeader>Use</PrecompiledHeader>
4753
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>

Src/CompareEngines/CompareEngines.vcxitems.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
<ClInclude Include="$(MSBuildThisFileDirectory)ExistenceCompare.h">
3131
<Filter>Header Files</Filter>
3232
</ClInclude>
33+
<ClInclude Include="$(MSBuildThisFileDirectory)FullQuickCompare.h">
34+
<Filter>Header Files</Filter>
35+
</ClInclude>
3336
</ItemGroup>
3437
<ItemGroup>
3538
<ClCompile Include="$(MSBuildThisFileDirectory)ImageCompare.cpp">
@@ -53,5 +56,8 @@
5356
<ClCompile Include="$(MSBuildThisFileDirectory)ExistenceCompare.cpp">
5457
<Filter>Source Files</Filter>
5558
</ClCompile>
59+
<ClCompile Include="$(MSBuildThisFileDirectory)FullQuickCompare.cpp">
60+
<Filter>Source Files</Filter>
61+
</ClCompile>
5662
</ItemGroup>
5763
</Project>

Src/CompareEngines/ExistenceCompare.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,13 @@ ExistenceCompare::~ExistenceCompare() = default;
2323

2424
/**
2525
* @brief Compare specified files by their existence
26-
* @param [in] di Diffitem info.
27-
* @return DIFFCODE
26+
* @param [in,out] di Diffitem info. Results are written to di.diffcode.
2827
*/
29-
int ExistenceCompare::CompareFiles(const DIFFITEM& di) const
28+
void ExistenceCompare::CompareFiles(DIFFITEM& di) const
3029
{
3130
unsigned code = DIFFCODE::SAME;
3231
if (di.diffcode.exists(0) != di.diffcode.exists(1) ||
33-
(m_nfiles > 2 && di.diffcode.exists(0) != di.diffcode.exists(2)))
32+
(m_nfiles > 2 && di.diffcode.exists(0) != di.diffcode.exists(2)))
3433
{
3534
code = DIFFCODE::DIFF;
3635
}
@@ -44,7 +43,9 @@ int ExistenceCompare::CompareFiles(const DIFFITEM& di) const
4443
else if (di.diffcode.exists(0) == di.diffcode.exists(1))
4544
code |= DIFFCODE::DIFF3RDONLY;
4645
}
47-
return code;
46+
47+
di.diffcode.diffcode &= ~(DIFFCODE::TEXTFLAGS | DIFFCODE::TYPEFLAGS | DIFFCODE::COMPAREFLAGS | DIFFCODE::COMPAREFLAGS3WAY);
48+
di.diffcode.diffcode |= DIFFCODE::FILE | code;
4849
}
4950

5051
} // namespace CompareEngines

Src/CompareEngines/ExistenceCompare.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class ExistenceCompare
1919
public:
2020
ExistenceCompare(CDiffContext& ctxt);
2121
~ExistenceCompare();
22-
int CompareFiles(const DIFFITEM &di) const;
22+
void CompareFiles(DIFFITEM& di) const;
2323
private:
2424
int m_nfiles;
2525
};

0 commit comments

Comments
 (0)