Revert "Fix a heap issue with static on Windows"
authorMaksim Shabunin <Maksim.Shabunin@itseez.com>
Fri, 8 Aug 2014 12:59:13 +0000 (16:59 +0400)
committerMaksim Shabunin <Maksim.Shabunin@itseez.com>
Fri, 8 Aug 2014 12:59:13 +0000 (16:59 +0400)
This reverts commit 8e93c19de311a76704028b0195abfe04cfad900d.

modules/flann/include/opencv2/flann/lsh_table.h

index 5da0e3f..737a4f5 100644 (file)
@@ -346,27 +346,21 @@ inline LshTable<unsigned char>::LshTable(unsigned int feature_size, unsigned int
     mask_ = std::vector<size_t>((size_t)ceil((float)(feature_size * sizeof(char)) / (float)sizeof(size_t)), 0);
 
     // A bit brutal but fast to code
-    static std::vector<size_t>* indices = NULL;
+    static std::vector<size_t> indices(feature_size * CHAR_BIT);
 
     //Ensure the Nth bit will be selected only once among the different LshTables
     //to avoid having two different tables with signatures sharing many dimensions/many bits
-    if( indices == NULL )
+    if( (indices.size() == feature_size * CHAR_BIT) || (indices.size() < key_size_) )
     {
-        indices = new std::vector<size_t>( feature_size * CHAR_BIT );
-    }
-    else if( indices->size() < key_size_ )
-    {
-      indices->resize( feature_size * CHAR_BIT );
-      for (size_t i = 0; i < feature_size * CHAR_BIT; ++i) {
-          (*indices)[i] = i;
-      }
-      std::random_shuffle(indices->begin(), indices->end());
+      indices.resize( feature_size * CHAR_BIT );
+      for (size_t i = 0; i < feature_size * CHAR_BIT; ++i) indices[i] = i;
+      std::random_shuffle(indices.begin(), indices.end());
     }
 
     // Generate a random set of order of subsignature_size_ bits
     for (unsigned int i = 0; i < key_size_; ++i) {
-        size_t index = (*indices)[0];
-        indices->erase( indices->begin() );
+        size_t index = indices[0];
+        indices.erase( indices.begin() );
 
         // Set that bit in the mask
         size_t divisor = CHAR_BIT * sizeof(size_t);