summaryrefslogtreecommitdiff
path: root/include/vcl
diff options
context:
space:
mode:
authorMarco Cecchetti <marco.cecchetti@collabora.com>2015-08-26 13:50:57 +0200
committerAndras Timar <andras.timar@collabora.com>2015-09-18 10:09:57 +0200
commit0a26c37c80da1c14c27557d8114896522b8e6006 (patch)
tree4a59c386804adbae38183f250c1f63e8a76dc8b7 /include/vcl
parentea1beb0796076274652c2672cef86e91340c9061 (diff)
tdf#93532 - Switching to 64-bit checksum
Added a C++ and a GLSL implementation of a 64-bit CRC algorithm. Changed hardcoded checksum value in ooxmlimport unit test (testN777345). Change-Id: I16bb985a14866775efda49e21fe033ff64645896 Reviewed-on: https://gerrit.libreoffice.org/18254 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'include/vcl')
-rw-r--r--include/vcl/alpha.hxx2
-rw-r--r--include/vcl/animate.hxx4
-rw-r--r--include/vcl/bitmap.hxx3
-rw-r--r--include/vcl/bitmapex.hxx2
-rw-r--r--include/vcl/checksum.hxx92
-rw-r--r--include/vcl/gdimtf.hxx2
-rw-r--r--include/vcl/graph.hxx4
7 files changed, 101 insertions, 8 deletions
diff --git a/include/vcl/alpha.hxx b/include/vcl/alpha.hxx
index ec89be425e12..89b6996f18e5 100644
--- a/include/vcl/alpha.hxx
+++ b/include/vcl/alpha.hxx
@@ -52,7 +52,7 @@ public:
Size GetSizePixel() const { return Bitmap::GetSizePixel(); }
sal_uLong GetSizeBytes() const { return Bitmap::GetSizeBytes(); }
- sal_uLong GetChecksum() const { return Bitmap::GetChecksum(); }
+ BitmapChecksum GetChecksum() const { return Bitmap::GetChecksum(); }
Bitmap GetBitmap() const;
diff --git a/include/vcl/animate.hxx b/include/vcl/animate.hxx
index 1f2a6b8b3920..db62836225b9 100644
--- a/include/vcl/animate.hxx
+++ b/include/vcl/animate.hxx
@@ -97,7 +97,7 @@ struct VCL_DLLPUBLIC AnimationBitmap
rAnimBmp.aBmpEx.IsEqual( aBmpEx ) );
}
- sal_uLong GetChecksum() const;
+ BitmapChecksum GetChecksum() const;
};
struct AInfo
@@ -173,7 +173,7 @@ public:
void Replace( const AnimationBitmap& rNewAnimationBmp, sal_uInt16 nAnimation );
sal_uLong GetSizeBytes() const;
- sal_uLong GetChecksum() const;
+ BitmapChecksum GetChecksum() const;
public:
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx
index a9f2146280c7..e9800a02b864 100644
--- a/include/vcl/bitmap.hxx
+++ b/include/vcl/bitmap.hxx
@@ -24,6 +24,7 @@
#include <tools/color.hxx>
#include <tools/link.hxx>
#include <tools/solar.h>
+#include <vcl/checksum.hxx>
#include <vcl/dllapi.h>
#include <vcl/mapmod.hxx>
#include <vcl/region.hxx>
@@ -386,7 +387,7 @@ public:
*/
bool GetSystemData( BitmapSystemData& rData ) const;
- sal_uLong GetChecksum() const;
+ BitmapChecksum GetChecksum() const;
Bitmap CreateDisplayBitmap( OutputDevice* pDisplay );
Bitmap GetColorTransformedBitmap() const;
diff --git a/include/vcl/bitmapex.hxx b/include/vcl/bitmapex.hxx
index 096e2a050905..d609d8944532 100644
--- a/include/vcl/bitmapex.hxx
+++ b/include/vcl/bitmapex.hxx
@@ -96,7 +96,7 @@ public:
sal_uInt16 GetBitCount() const { return aBitmap.GetBitCount(); }
sal_uLong GetSizeBytes() const;
- sal_uLong GetChecksum() const;
+ BitmapChecksum GetChecksum() const;
public:
diff --git a/include/vcl/checksum.hxx b/include/vcl/checksum.hxx
new file mode 100644
index 000000000000..7e1076fb3139
--- /dev/null
+++ b/include/vcl/checksum.hxx
@@ -0,0 +1,92 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+
+#ifndef INCLUDED_VCL_INC_CHECKSUM_HXX
+#define INCLUDED_VCL_INC_CHECKSUM_HXX
+
+#include <sal/config.h>
+#include <sal/types.h>
+#include <tools/solar.h>
+#include <vcl/dllapi.h>
+
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/mul.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+#define BITMAP_CHECKSUM_SIZE 8
+#define BITMAP_CHECKSUM_BITS BOOST_PP_MUL(BITMAP_CHECKSUM_SIZE, 8)
+
+typedef sal_uInt64 BitmapChecksum;
+typedef sal_uInt8 BitmapChecksumOctetArray[BITMAP_CHECKSUM_SIZE];
+
+#define BITMAP_CHECKSUM_SET_OCTET(z, i, unused) \
+p[i] = (sal_uInt8)(n >> BOOST_PP_MUL(8, i));
+
+
+inline void BCToBCOA( BitmapChecksum n , BitmapChecksumOctetArray p )
+{
+ BOOST_PP_REPEAT(BITMAP_CHECKSUM_SIZE , BITMAP_CHECKSUM_SET_OCTET, unused)
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*========================================================================
+ *
+ * vcl_crc64 interface.
+ *
+ *======================================================================*/
+/** Evaluate CRC64 over given data.
+
+ This function evaluates the CRC polynomial 0xEDB88320.
+
+ @param Crc [in] CRC64 over previous data or zero.
+ @param Data [in] data buffer.
+ @param DatLen [in] data buffer length.
+ @return new CRC64 value.
+ */
+VCL_DLLPUBLIC sal_uInt64 SAL_CALL vcl_crc64 (
+ sal_uInt64 Crc,
+ const void *Data, sal_uInt32 DatLen
+) SAL_THROW_EXTERN_C();
+
+
+
+VCL_DLLPUBLIC const sal_uInt64* vcl_get_crc64_table();
+
+
+#ifdef __cplusplus
+}
+#endif
+
+inline BitmapChecksum vcl_get_checksum (
+ BitmapChecksum Checksum,
+ const void *Data,
+ sal_uInt32 DatLen
+)
+{
+ return (BitmapChecksum)(vcl_crc64( Checksum, Data, DatLen ));
+}
+
+
+#endif // INCLUDED_VCL_INC_CHECKSUM_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/vcl/gdimtf.hxx b/include/vcl/gdimtf.hxx
index 8baa116eea95..28075dcf1607 100644
--- a/include/vcl/gdimtf.hxx
+++ b/include/vcl/gdimtf.hxx
@@ -198,7 +198,7 @@ public:
void SetHookHdl( const Link<>& rLink ) { aHookHdlLink = rLink; }
const Link<>& GetHookHdl() const { return aHookHdlLink; }
- sal_uLong GetChecksum() const;
+ BitmapChecksum GetChecksum() const;
sal_uLong GetSizeBytes() const;
// Methods for reading and writing the new formats;
diff --git a/include/vcl/graph.hxx b/include/vcl/graph.hxx
index 778c6719c4c7..929daf8ee1fb 100644
--- a/include/vcl/graph.hxx
+++ b/include/vcl/graph.hxx
@@ -161,9 +161,9 @@ public:
void SetAnimationNotifyHdl( const Link<>& rLink );
Link<> GetAnimationNotifyHdl() const;
- sal_uLong GetAnimationLoopCount() const;
+ sal_uLong GetAnimationLoopCount() const;
- sal_uLong GetChecksum() const;
+ BitmapChecksum GetChecksum() const;
public: