commit cbad214cdda5f85a177148e38c138b9560ba0c17
Author: Yuriy Skalko <yuriy.ska...@gmail.com>
Date:   Sat Nov 21 15:40:31 2020 +0200

    Refactor checksum calculation
---
 src/ConverterCache.cpp              |   13 ++-------
 src/frontends/qt/GuiApplication.cpp |   11 ++------
 src/frontends/qt/GuiClipboard.cpp   |   15 ++++-------
 src/support/FileName.cpp            |   22 ++++------------
 src/support/Makefile.am             |    2 +
 src/support/checksum.cpp            |   46 +++++++++++++++++++++++++++++++++++
 src/support/checksum.h              |   30 ++++++++++++++++++++++
 7 files changed, 95 insertions(+), 44 deletions(-)

diff --git a/src/ConverterCache.cpp b/src/ConverterCache.cpp
index bee0253..0f4d03e 100644
--- a/src/ConverterCache.cpp
+++ b/src/ConverterCache.cpp
@@ -25,8 +25,8 @@
 #include "support/lyxtime.h"
 #include "support/Package.h"
 
+#include "support/checksum.h"
 #include "support/lassert.h"
-#include <boost/crc.hpp>
 
 #include <algorithm>
 #include <fstream>
@@ -41,14 +41,6 @@ namespace lyx {
 
 namespace {
 
-unsigned long do_crc(string const & s)
-{
-       boost::crc_32_type crc;
-       crc = for_each(s.begin(), s.end(), crc);
-       return crc.checksum();
-}
-
-
 // FIXME THREAD
 // This should be OK because it is only assigned during init()
 static FileName cache_dir;
@@ -62,7 +54,8 @@ public:
                : timestamp(t), checksum(c)
        {
                ostringstream os;
-               os << setw(10) << setfill('0') << 
do_crc(orig_from.absFileName())
+               os << setw(10) << setfill('0')
+                  << support::checksum(orig_from.absFileName())
                   << '-' << to_format;
                cache_name = FileName(addName(cache_dir.absFileName(), 
os.str()));
                LYXERR(Debug::FILES, "Add file cache item " << orig_from
diff --git a/src/frontends/qt/GuiApplication.cpp 
b/src/frontends/qt/GuiApplication.cpp
index b3cfd5e..8ab89b8 100644
--- a/src/frontends/qt/GuiApplication.cpp
+++ b/src/frontends/qt/GuiApplication.cpp
@@ -59,6 +59,7 @@
 
 #include "insets/InsetText.h"
 
+#include "support/checksum.h"
 #include "support/convert.h"
 #include "support/debug.h"
 #include "support/ExceptionMessage.h"
@@ -146,8 +147,6 @@
 #include <QMacPasteboardMime>
 #endif // Q_OS_MAC
 
-#include <boost/crc.hpp>
-
 #include <exception>
 #include <sstream>
 #include <vector>
@@ -1708,9 +1707,7 @@ void GuiApplication::dispatch(FuncRequest const & cmd, 
DispatchResult & dr)
                        && !is_open)) {
                        // We want the ui session to be saved per document and 
not per
                        // window number. The filename crc is a good enough 
identifier.
-                       boost::crc_32_type crc;
-                       crc = for_each(fname.begin(), fname.end(), crc);
-                       createView(crc.checksum());
+                       createView(support::checksum(fname));
                        current_view_->openDocument(fname);
                        if (!current_view_->documentBufferView())
                                current_view_->close();
@@ -2670,10 +2667,8 @@ void GuiApplication::restoreGuiSession()
                FileName const & file_name = last.file_name;
                if (!current_view_ || (!lyxrc.open_buffers_in_tabs
                          && current_view_->documentBufferView() != 0)) {
-                       boost::crc_32_type crc;
                        string const & fname = file_name.absFileName();
-                       crc = for_each(fname.begin(), fname.end(), crc);
-                       createView(crc.checksum());
+                       createView(support::checksum(fname));
                }
                current_view_->loadDocument(file_name, false);
 
diff --git a/src/frontends/qt/GuiClipboard.cpp 
b/src/frontends/qt/GuiClipboard.cpp
index 59e5900..f78ab1c 100644
--- a/src/frontends/qt/GuiClipboard.cpp
+++ b/src/frontends/qt/GuiClipboard.cpp
@@ -35,6 +35,8 @@
 
 #include "frontends/alert.h"
 
+#include "support/checksum.h"
+
 #include <QApplication>
 #include <QBuffer>
 #include <QClipboard>
@@ -47,8 +49,6 @@
 #include <QTextDocument>
 #include <QTimer>
 
-#include <boost/crc.hpp>
-
 #include <memory>
 #include <map>
 #include <iostream>
@@ -431,11 +431,8 @@ void GuiClipboard::put(string const & lyx, docstring const 
& html, docstring con
                data->setData(lyxMimeType(), qlyx);
                // If the OS has not the concept of clipboard ownership,
                // we recognize internal data through its checksum.
-               if (!hasInternal()) {
-                       boost::crc_32_type crc32;
-                       crc32.process_bytes(lyx.c_str(), lyx.size());
-                       checksum = crc32.checksum();
-               }
+               if (!hasInternal())
+                       checksum = support::checksum(lyx);
        }
        // Don't test for text.empty() since we want to be able to clear the
        // clipboard.
@@ -528,9 +525,7 @@ bool GuiClipboard::isInternal() const
        // ourself by comparing its checksum with the stored one.
        QByteArray const ar = cache_.data(lyxMimeType());
        string const data(ar.data(), ar.count());
-       boost::crc_32_type crc32;
-       crc32.process_bytes(data.c_str(), data.size());
-       return checksum == crc32.checksum();
+       return checksum == static_cast<std::uint32_t>(support::checksum(data));
 }
 
 
diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp
index 4e075f2..3d31c7d 100644
--- a/src/support/FileName.cpp
+++ b/src/support/FileName.cpp
@@ -35,7 +35,7 @@
 #include <QThread>
 #endif
 
-#include <boost/crc.hpp>
+#include "support/checksum.h"
 
 #include <algorithm>
 #include <iterator>
@@ -537,20 +537,14 @@ bool FileName::link(FileName const & name) const
 
 unsigned long checksum_ifstream_fallback(char const * file)
 {
-       unsigned long result = 0;
        //LYXERR(Debug::FILES, "lyx::sum() using istreambuf_iterator (fast)");
        ifstream ifs(file, ios_base::in | ios_base::binary);
        if (!ifs)
-               return result;
-
-       istreambuf_iterator<char> beg(ifs);
-       istreambuf_iterator<char> end;
-       boost::crc_32_type crc;
-       crc = for_each(beg, end, crc);
-       result = crc.checksum();
-       return result;
+               return 0;
+       return support::checksum(ifs);
 }
 
+
 unsigned long FileName::checksum() const
 {
        if (!exists()) {
@@ -583,11 +577,9 @@ unsigned long FileName::checksum() const
        qint64 size = fi.size();
        uchar * ubeg = qf.map(0, size);
        uchar * uend = ubeg + size;
-       boost::crc_32_type ucrc;
-       ucrc.process_block(ubeg, uend);
+       result = support::checksum(ubeg, uend);
        qf.unmap(ubeg);
        qf.close();
-       result = ucrc.checksum();
 
 #else // QT_VERSION
 
@@ -619,9 +611,7 @@ unsigned long FileName::checksum() const
        char * beg = static_cast<char*>(mm);
        char * end = beg + info.st_size;
 
-       boost::crc_32_type crc;
-       crc.process_block(beg, end);
-       result = crc.checksum();
+       result = support::checksum(beg, end);
 
        munmap(mm, info.st_size);
        close(fd);
diff --git a/src/support/Makefile.am b/src/support/Makefile.am
index addeab8..45d30b8 100644
--- a/src/support/Makefile.am
+++ b/src/support/Makefile.am
@@ -38,6 +38,8 @@ liblyxsupport_a_SOURCES = \
        bind.h \
        Cache.h \
        Changer.h \
+       checksum.cpp \
+       checksum.h \
        ConsoleApplication.cpp \
        ConsoleApplication.h \
        ConsoleApplicationPrivate.h \
diff --git a/src/support/checksum.cpp b/src/support/checksum.cpp
new file mode 100644
index 0000000..151b533
--- /dev/null
+++ b/src/support/checksum.cpp
@@ -0,0 +1,46 @@
+// -*- C++ -*-
+/**
+ * \file checksum.cpp
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Yuriy Skalko
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include "support/checksum.h"
+#include "boost/crc.hpp"
+#include <iterator>
+
+namespace lyx {
+
+namespace support {
+
+unsigned long checksum(std::string const & s)
+{
+       boost::crc_32_type crc;
+       crc.process_bytes(s.c_str(), s.size());
+       return crc.checksum();
+}
+
+unsigned long checksum(std::ifstream & ifs)
+{
+       std::istreambuf_iterator<char> beg(ifs);
+       std::istreambuf_iterator<char> end;
+
+       boost::crc_32_type crc;
+       crc = for_each(beg, end, crc);
+       return crc.checksum();
+}
+
+unsigned long checksum(char const * beg, char const * end)
+{
+       boost::crc_32_type crc;
+       crc.process_block(beg, end);
+       return crc.checksum();
+}
+
+} // namespace support
+
+} // namespace lyx
diff --git a/src/support/checksum.h b/src/support/checksum.h
new file mode 100644
index 0000000..ab14339
--- /dev/null
+++ b/src/support/checksum.h
@@ -0,0 +1,30 @@
+// -*- C++ -*-
+/**
+ * \file checksum.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Yuriy Skalko
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef LYX_CHECKSUM_H
+#define LYX_CHECKSUM_H
+
+#include <fstream>
+#include <string>
+
+namespace lyx {
+
+namespace support {
+
+unsigned long checksum(std::string const & s);
+unsigned long checksum(std::ifstream & ifs);
+unsigned long checksum(char const * beg, char const * end);
+
+} // namespace support
+
+} // namespace lyx
+
+#endif // LYX_CHECKSUM_H
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to