summaryrefslogtreecommitdiff
path: root/lib/binary.cpp
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:29:28 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:29:28 +0200
commit75c07011b7c4d06acd7b45dabdcd60ab9d80f385 (patch)
tree8853c3978dd152ef377e652239448b1352320206 /lib/binary.cpp
parent5.22 (diff)
downloadFreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.tar.gz
FreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.tar.bz2
FreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.zip
5.23
Diffstat (limited to 'lib/binary.cpp')
-rw-r--r--lib/binary.cpp134
1 files changed, 0 insertions, 134 deletions
diff --git a/lib/binary.cpp b/lib/binary.cpp
deleted file mode 100644
index 0e41f7a6..00000000
--- a/lib/binary.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-// **************************************************************************
-// * This file is part of the FreeFileSync project. It is distributed under *
-// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *
-// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
-// **************************************************************************
-
-#include "binary.h"
-#include <zen/tick_count.h>
-#include <vector>
-#include <zen/file_io.h>
-#include <zen/int64.h>
-#include <boost/thread/tss.hpp>
-
-using namespace zen;
-
-
-namespace
-{
-inline
-void setMinSize(std::vector<char>& buffer, size_t minSize)
-{
- if (buffer.size() < minSize) //this is similar to reserve(), but we need a "properly initialized" array here
- buffer.resize(minSize);
-}
-
-class BufferSize
-{
-public:
- BufferSize() : bufSize(BUFFER_SIZE_START) {}
-
- void inc()
- {
- if (bufSize < BUFFER_SIZE_MAX)
- bufSize *= 2;
- }
-
- void dec()
- {
- if (bufSize > BUFFER_SIZE_MIN)
- bufSize /= 2;
- }
-
- operator size_t() const { return bufSize; }
-
-private:
- static const size_t BUFFER_SIZE_MIN = 64 * 1024;
- static const size_t BUFFER_SIZE_START = 128 * 1024; //initial buffer size
- static const size_t BUFFER_SIZE_MAX = 16 * 1024 * 1024;
-
- /*Tests on Win7 x64 show that buffer size does NOT matter if files are located on different physical disks!
- Impact of buffer size when files are on same disk:
-
- buffer MB/s
- ------------
- 64 10
- 128 19
- 512 40
- 1024 48
- 2048 56
- 4096 56
- 8192 56
- */
-
- size_t bufSize;
-};
-
-
-const std::int64_t TICKS_PER_SEC = ticksPerSec();
-}
-
-
-bool zen::filesHaveSameContent(const Zstring& filename1, const Zstring& filename2, CompareCallback& callback)
-{
- static boost::thread_specific_ptr<std::vector<char>> cpyBuf1;
- static boost::thread_specific_ptr<std::vector<char>> cpyBuf2;
- if (!cpyBuf1.get())
- cpyBuf1.reset(new std::vector<char>());
- if (!cpyBuf2.get())
- cpyBuf2.reset(new std::vector<char>());
-
- std::vector<char>& memory1 = *cpyBuf1;
- std::vector<char>& memory2 = *cpyBuf2;
-
- FileInput file1(filename1); //throw FileError
- FileInput file2(filename2); //
-
- BufferSize bufferSize;
-
- TickVal lastDelayViolation = getTicks();
-
- do
- {
- setMinSize(memory1, bufferSize);
- setMinSize(memory2, bufferSize);
-
- const TickVal startTime = getTicks();
-
- const size_t length1 = file1.read(&memory1[0], bufferSize); //throw FileError
- const size_t length2 = file2.read(&memory2[0], bufferSize); //returns actual number of bytes read
- //send progress updates immediately after reading to reliably allow speed calculations for our clients!
- callback.updateCompareStatus(to<Int64>(std::max(length1, length2)));
-
- if (length1 != length2 || ::memcmp(&memory1[0], &memory2[0], length1) != 0)
- return false;
-
- //-------- dynamically set buffer size to keep callback interval between 100 - 500ms ---------------------
- if (TICKS_PER_SEC > 0)
- {
- const TickVal now = getTicks();
-
- const std::int64_t loopTime = dist(startTime, now) * 1000 / TICKS_PER_SEC; //unit: [ms]
- if (loopTime < 100)
- {
- if (dist(lastDelayViolation, now) / TICKS_PER_SEC > 2) //avoid "flipping back": e.g. DVD-Roms read 32MB at once, so first read may be > 500 ms, but second one will be 0ms!
- {
- lastDelayViolation = now;
- bufferSize.inc();
- }
- }
- else if (loopTime > 500)
- {
- lastDelayViolation = now;
- bufferSize.dec();
- }
- }
- //------------------------------------------------------------------------------------------------
- }
- while (!file1.eof());
-
- if (!file2.eof()) //highly unlikely, but possible! (but then again, not in this context where both files have same size...)
- return false;
-
- return true;
-}
bgstack15