X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flyxsum.C;h=213298cc0412cf7c4bc642359d6bee7ba69c65b1;hb=5e7275dabc36e1acb396c45ba27aecf8d8a0171e;hp=876e91f68d06f1a6f2ecc2908ceab5c97ec427f1;hpb=b8ec942f9209b78b7fea7e126425b2c60e78a474;p=lyx.git diff --git a/src/support/lyxsum.C b/src/support/lyxsum.C index 876e91f68d..213298cc04 100644 --- a/src/support/lyxsum.C +++ b/src/support/lyxsum.C @@ -1,6 +1,6 @@ /* This file is part of * ====================================================== - * + * * LyX, The Document Processor * Copyright 2001 The LyX Team. * @@ -10,18 +10,17 @@ #include +#include "support/lyxlib.h" +#include "debug.h" + #include #include -#include "support/lyxlib.h" - +using std::endl; // Various implementations of lyx::sum(), depending on what methods // are available. Order is faster to slowest. #if defined(HAVE_MMAP) && defined(HAVE_MUNMAP) -#ifdef WITH_WARNINGS -#warning lyx::sum() using mmap (lightning fast) -#endif // Make sure we get modern version of mmap and friends with void*, // not `compatibility' version with caddr_t. @@ -33,15 +32,19 @@ #include #include + unsigned long lyx::sum(string const & file) { + lyxerr[Debug::FILES] << "lyx::sum() using mmap (lightning fast)" + << endl; + int fd = open(file.c_str(), O_RDONLY); - if(!fd) + if (!fd) return 0; - + struct stat info; fstat(fd, &info); - + void * mm = mmap(0, info.st_size, PROT_READ, MAP_PRIVATE, fd, 0); // Some platforms have the wrong type for MAP_FAILED (compaq cxx). @@ -49,17 +52,17 @@ unsigned long lyx::sum(string const & file) close(fd); return 0; } - + char * beg = static_cast(mm); char * end = beg + info.st_size; - + boost::crc_32_type crc; crc.process_block(beg, end); unsigned long result = crc.checksum(); - + munmap(mm, info.st_size); close(fd); - + return result; } #else // No mmap @@ -67,6 +70,8 @@ unsigned long lyx::sum(string const & file) #include #include +using std::for_each; + namespace { template @@ -74,39 +79,47 @@ inline unsigned long do_crc(InputIterator first, InputIterator last) { boost::crc_32_type crc; - crc = std::for_each(first, last, crc); + crc = for_each(first, last, crc); return crc.checksum(); } } // namespace #if HAVE_DECL_ISTREAMBUF_ITERATOR -#ifdef WITH_WARNINGS -#warning lyx::sum() using istreambuf_iterator (fast) -#endif +using std::ifstream; +using std::istreambuf_iterator; + unsigned long lyx::sum(string const & file) { - std::ifstream ifs(file.c_str()); + lyxerr[Debug::FILES] << "lyx::sum() using istreambuf_iterator (fast)" + << endl; + + ifstream ifs(file.c_str()); if (!ifs) return 0; - - std::istreambuf_iterator beg(ifs); - std::istreambuf_iterator end; - + + istreambuf_iterator beg(ifs); + istreambuf_iterator end; + return do_crc(beg,end); } #else -#ifdef WITH_WARNINGS -#warning lyx::sum() using istream_iterator (slow as a snail) -#endif + +using std::istream_iterator; +using std::ios; + unsigned long lyx::sum(string const & file) { - std::ifstream ifs(file.c_str()); + lyxerr[Debug::FILES] + << "lyx::sum() using istream_iterator (slow as a snail)" + << endl; + + ifstream ifs(file.c_str()); if (!ifs) return 0; - - ifs.unsetf(std::ios::skipws); - std::istream_iterator beg(ifs); - std::istream_iterator end; - + + ifs.unsetf(ios::skipws); + istream_iterator beg(ifs); + istream_iterator end; + return do_crc(beg,end); } #endif