--- /dev/null
+/**
+ * @file TimeSizeCompare.cpp
+ *
+ * @brief Implementation file for TimeSizeCompare
+ */
+// ID line follows -- this is updated by SVN
+// $Id$
+
+#include "stdafx.h"
+#include "DiffContext.h"
+#include "DIFF.H"
+#include "DiffItem.h"
+#include "TimeSizeCompare.h"
+#include "DiffWrapper.h"
+
+namespace CompareEngines
+{
+
+TimeSizeCompare::TimeSizeCompare()
+: m_ignoreSmallDiff(false)
+{
+}
+
+TimeSizeCompare::~TimeSizeCompare()
+{
+}
+
+/**
+ * @brief Set compare-type specific options.
+ * @param [in] ignoreSmallDiff Ignore small time differences?
+ */
+void TimeSizeCompare::SetAdditionalOptions(bool ignoreSmallDiff)
+{
+ m_ignoreSmallDiff = ignoreSmallDiff;
+}
+
+/**
+ * @brief Compare two specified files, byte-by-byte
+ * @param [in] compMethod Compare method used.
+ * @param [in] di Diffitem info.
+ * @return DIFFCODE
+ */
+int TimeSizeCompare::CompareFiles(int compMethod, const DIFFITEM &di)
+{
+ UINT code = 0;
+
+ // Compare by modified date
+ // Check that we have both filetimes
+ if (di.left.mtime != 0 && di.right.mtime != 0)
+ {
+ INT64 nTimeDiff = di.left.mtime - di.right.mtime;
+ // Remove sign
+ nTimeDiff = (nTimeDiff > 0 ? nTimeDiff : -nTimeDiff);
+ if (m_ignoreSmallDiff)
+ {
+ // If option to ignore small timediffs (couple of seconds)
+ // is set, decrease absolute difference by allowed diff
+ nTimeDiff -= SmallTimeDiff;
+ }
+ if (nTimeDiff <= 0)
+ code = DIFFCODE::SAME;
+ else
+ code = DIFFCODE::DIFF;
+ }
+ else
+ {
+ // Filetimes for item(s) could not be read. So we have to
+ // set error status, unless we have DATE_SIZE -compare
+ // when we have still hope for size compare..
+ if (compMethod == CMP_DATE_SIZE)
+ code = DIFFCODE::SAME;
+ else
+ code = DIFFCODE::CMPERR;
+ }
+
+ // This is actual CMP_DATE_SIZE method..
+ // If file sizes differ mark them different
+ if (compMethod == CMP_DATE_SIZE)
+ {
+ if (di.left.size != di.right.size)
+ {
+ code &= ~DIFFCODE::SAME;
+ code = DIFFCODE::DIFF;
+ }
+ }
+ return code;
+}
+
+} // namespace CompareEngines
--- /dev/null
+/**
+ * @file TimeSizeCompare.h
+ *
+ * @brief Declaration file for TimeSizeCompare compare engine.
+ */
+// ID line follows -- this is updated by SVN
+// $Id$
+
+#ifndef _TIMESIZE_COMPARE_H_
+#define _TIMESIZE_COMPARE_H_
+
+namespace CompareEngines
+{
+
+/**
+ * @brief A time/size compare class.
+ * This compare method compares files by their times and sizes.
+ */
+class TimeSizeCompare
+{
+public:
+ TimeSizeCompare();
+ ~TimeSizeCompare();
+ void SetAdditionalOptions(bool ignoreSmallDiff);
+ int CompareFiles(int compMethod, const DIFFITEM &di);
+
+private:
+ bool m_ignoreSmallDiff;
+};
+
+} // namespace CompareEngines
+
+#endif // _TIMESIZE_COMPARE_H_
#include "FolderCmp.h"
#include "ByteComparator.h"
#include "codepage_detect.h"
+#include "TimeSizeCompare.h"
using CompareEngines::ByteCompare;
+using CompareEngines::TimeSizeCompare;
static void GetComparePaths(CDiffContext * pCtxt, const DIFFITEM &di, String & left, String & right);
static bool Unpack(String & filepathTransformed,
FolderCmp::FolderCmp()
: m_pDiffUtilsEngine(NULL)
, m_pByteCompare(NULL)
+, m_pTimeSizeCompare(NULL)
, m_ndiffs(CDiffContext::DIFFS_UNKNOWN)
, m_ntrivialdiffs(CDiffContext::DIFFS_UNKNOWN)
, m_pCtx(NULL)
{
delete m_pDiffUtilsEngine;
delete m_pByteCompare;
+ delete m_pTimeSizeCompare;
}
bool FolderCmp::RunPlugins(CDiffContext * pCtxt, PluginsContext * plugCtxt, CString &errStr)
di.left.m_textStats = m_diffFileData.m_textStats0;
di.right.m_textStats = m_diffFileData.m_textStats1;
}
- else if (nCompMethod == CMP_DATE || nCompMethod == CMP_DATE_SIZE)
+ else if (nCompMethod == CMP_DATE || nCompMethod == CMP_DATE_SIZE || nCompMethod == CMP_SIZE)
{
- // Compare by modified date
- // Check that we have both filetimes
- if (di.left.mtime != 0 && di.right.mtime != 0)
- {
- __int64 nTimeDiff = di.left.mtime - di.right.mtime;
- // Remove sign
- nTimeDiff = (nTimeDiff > 0 ? nTimeDiff : -nTimeDiff);
- if (pCtxt->m_bIgnoreSmallTimeDiff)
- {
- // If option to ignore small timediffs (couple of seconds)
- // is set, decrease absolute difference by allowed diff
- nTimeDiff -= SmallTimeDiff;
- }
- if (nTimeDiff <= 0)
- code = DIFFCODE::SAME;
- else
- code = DIFFCODE::DIFF;
- }
- else
- {
- // Filetimes for item(s) could not be read. So we have to
- // set error status, unless we have DATE_SIZE -compare
- // when we have still hope for size compare..
- if (nCompMethod == CMP_DATE_SIZE)
- code = DIFFCODE::SAME;
- else
- code = DIFFCODE::CMPERR;
- }
-
- // This is actual CMP_DATE_SIZE method..
- // If file sizes differ mark them different
- if (nCompMethod == CMP_DATE_SIZE)
- {
- if (di.left.size != di.right.size)
- {
- code &= ~DIFFCODE::SAME;
- code = DIFFCODE::DIFF;
- }
- }
- }
- else if (nCompMethod == CMP_SIZE)
- {
- // Compare by size
- if (di.left.size == di.right.size)
- code = DIFFCODE::SAME;
- else
- code = DIFFCODE::DIFF;
+ if (m_pTimeSizeCompare == NULL)
+ m_pTimeSizeCompare = new TimeSizeCompare();
+
+ m_pTimeSizeCompare->SetAdditionalOptions(!!pCtxt->m_bIgnoreSmallTimeDiff);
+ code = m_pTimeSizeCompare->CompareFiles(nCompMethod, di);
+
}
else
{
#include "DiffFileData.h"
#include "DiffUtils.h"
#include "ByteCompare.h"
+#include "TimeSizeCompare.h"
class CDiffContext;
class PackingInfo;
private:
CompareEngines::DiffUtils *m_pDiffUtilsEngine;
CompareEngines::ByteCompare *m_pByteCompare;
+ CompareEngines::TimeSizeCompare *m_pTimeSizeCompare;
};
</FileConfiguration>
</File>
<File
+ RelativePath="CompareEngines\TimeSizeCompare.cpp">
+ <FileConfiguration
+ Name="UnicodeRelease|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="UnicodeDebug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""/>
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="Common\ToolBarXPThemes.cpp">
<FileConfiguration
Name="UnicodeRelease|Win32">
RelativePath="TestFilterDlg.h">
</File>
<File
+ RelativePath="CompareEngines\TimeSizeCompare.h">
+ </File>
+ <File
RelativePath="Common\ToolbarXPThemes.h">
</File>
<File