Using std::map in PlanCache
authorAlexander Karsakov <karsakov.a.s@gmail.com>
Sun, 27 Jul 2014 09:31:46 +0000 (13:31 +0400)
committerAlexander Karsakov <karsakov.a.s@gmail.com>
Mon, 28 Jul 2014 10:19:47 +0000 (14:19 +0400)
modules/core/src/dxt.cpp

index b57e4e8cc05f34f765d0f66c22242de825c4ada7..69cac1a0fce3161432ca4ea2c329661a0cedf508 100644 (file)
@@ -43,6 +43,7 @@
 #include "opencv2/core/opencl/runtime/opencl_clamdfft.hpp"
 #include "opencv2/core/opencl/runtime/opencl_core.hpp"
 #include "opencl_kernels.hpp"
+#include <map>
 
 namespace cv
 {
@@ -1801,10 +1802,9 @@ private:
     String buildOptions;
     int thread_count;
     bool status;
-
-public:
     int dft_size;
 
+public:
     OCL_FftPlan(int _size): dft_size(_size), status(true)
     {
         int min_radix;
@@ -1999,18 +1999,17 @@ public:
 
     Ptr<OCL_FftPlan> getFftPlan(int dft_size)
     {
-        for (size_t i = 0, size = planStorage.size(); i < size; ++i)
+        std::map<int, Ptr<OCL_FftPlan> >::iterator f = planStorage.find(dft_size);
+        if (f != planStorage.end())
         {
-            Ptr<OCL_FftPlan> plan = planStorage[i];
-            if (plan->dft_size == dft_size)
-            {
-                return plan;
-            }
+            return f->second;
+        }
+        else
+        {
+            Ptr<OCL_FftPlan> newPlan = Ptr<OCL_FftPlan>(new OCL_FftPlan(dft_size));
+            planStorage[dft_size] = newPlan;
+            return newPlan;
         }
-
-        Ptr<OCL_FftPlan> newPlan = Ptr<OCL_FftPlan>(new OCL_FftPlan(dft_size));
-        planStorage.push_back(newPlan);
-        return newPlan;
     }
 
     ~OCL_FftPlanCache()
@@ -2023,8 +2022,7 @@ protected:
         planStorage()
     {
     }
-
-    std::vector<Ptr<OCL_FftPlan> > planStorage;
+    std::map<int, Ptr<OCL_FftPlan> > planStorage;
 };
 
 static bool ocl_dft_rows(InputArray _src, OutputArray _dst, int nonzero_rows, int flags, int fftType)