Smart operators for smart Ptr (feature #2637)
authorAnatoly Baksheev <no@email>
Fri, 21 Dec 2012 19:27:29 +0000 (23:27 +0400)
committerAnatoly Baksheev <no@email>
Mon, 7 Jan 2013 18:33:12 +0000 (22:33 +0400)
modules/core/include/opencv2/core/core.hpp
modules/core/include/opencv2/core/operations.hpp
modules/core/src/persistence.cpp
modules/features2d/src/matchers.cpp

index 5b8ee63..94d7526 100644 (file)
@@ -1277,12 +1277,13 @@ public:
     operator _Tp* ();
     operator const _Tp*() const;
 
-    bool operator==(const Ptr<_Tp>& ptr) const;
-
     _Tp* obj; //< the object pointer.
     int* refcount; //< the associated reference counter
 };
 
+template<class T, class U> bool operator==(Ptr<T> const & a, Ptr<U> const & b);
+template<class T, class U> bool operator!=(Ptr<T> const & a, Ptr<U> const & b);
+
 
 //////////////////////// Input/Output Array Arguments /////////////////////////////////
 
index aaabe5f..eaae0c0 100644 (file)
@@ -2691,10 +2691,11 @@ template<typename _Tp> template<typename _Tp2> inline const Ptr<_Tp2> Ptr<_Tp>::
     return p;
 }
 
-template<typename _Tp> inline bool Ptr<_Tp>::operator==(const Ptr<_Tp>& _ptr) const
-{
-    return refcount == _ptr.refcount;
-}
+template<class _Tp, class _Tp2> inline bool operator==(const Ptr<_Tp>& a, const Ptr<_Tp2>& b) { return a.refcount == b.refcount; }
+template<class _Tp, class _Tp2> inline bool operator!=(const Ptr<_Tp>& a, const Ptr<_Tp2>& b) { return a.refcount != b.refcount; }
+
+
+
 
 //// specializied implementations of Ptr::delete_obj() for classic OpenCV types
 
index aee20b3..f87364c 100644 (file)
@@ -5519,7 +5519,7 @@ void read( const FileNode& node, SparseMat& mat, const SparseMat& default_mat )
         return;
     }
     Ptr<CvSparseMat> m = (CvSparseMat*)cvRead((CvFileStorage*)node.fs, (CvFileNode*)*node);
-    CV_Assert(CV_IS_SPARSE_MAT(m));
+    CV_Assert(CV_IS_SPARSE_MAT(m.obj));
     SparseMat(m).copyTo(mat);
 }
 
index aac9e6b..e82b173 100644 (file)
@@ -616,7 +616,7 @@ void FlannBasedMatcher::write( FileStorage& fs) const
 {
      fs << "indexParams" << "[";
 
-     if (indexParams != 0)
+     if (indexParams)
      {
          std::vector<std::string> names;
          std::vector<int> types;
@@ -667,7 +667,7 @@ void FlannBasedMatcher::write( FileStorage& fs) const
 
      fs << "]" << "searchParams" << "[";
 
-     if (searchParams != 0)
+     if (searchParams)
      {
          std::vector<std::string> names;
          std::vector<int> types;