Precompute the divisor to ensure that no kind of compiler would process it on the...
authorPierre-Emmanuel Viel <p.emmanuel.viel@gmail.com>
Wed, 1 Jul 2020 16:52:05 +0000 (18:52 +0200)
committerPierre-Emmanuel Viel <p.emmanuel.viel@gmail.com>
Wed, 1 Jul 2020 16:52:05 +0000 (18:52 +0200)
modules/flann/include/opencv2/flann/dist.h

index b092b53..4cf32d5 100644 (file)
@@ -506,7 +506,7 @@ struct Hamming2
         const uint64_t* pa = reinterpret_cast<const uint64_t*>(a);
         const uint64_t* pb = reinterpret_cast<const uint64_t*>(b);
         ResultType result = 0;
-        size /= (sizeof(uint64_t)/sizeof(unsigned char));
+        size /= long_word_size_;
         for(size_t i = 0; i < size; ++i ) {
             result += popcnt64(*pa ^ *pb);
             ++pa;
@@ -516,7 +516,7 @@ struct Hamming2
         const uint32_t* pa = reinterpret_cast<const uint32_t*>(a);
         const uint32_t* pb = reinterpret_cast<const uint32_t*>(b);
         ResultType result = 0;
-        size /= (sizeof(uint32_t)/sizeof(unsigned char));
+        size /= long_word_size_;
         for(size_t i = 0; i < size; ++i ) {
             result += popcnt32(*pa ^ *pb);
             ++pa;
@@ -525,6 +525,13 @@ struct Hamming2
 #endif
         return result;
     }
+
+private:
+#ifdef FLANN_PLATFORM_64_BIT
+    static const size_t long_word_size_ = sizeof(uint64_t)/sizeof(unsigned char);
+#else
+    static const size_t long_word_size_ = sizeof(uint32_t)/sizeof(unsigned char);
+#endif
 };