Made Filestorage able to not own its CvFileStorage instance.

This allows to get rid of the last remaining Ptr<T>::addref calls.
pull/1281/head
Roman Donchenko 11 years ago
parent 3e189a2b41
commit a50d75d362
  1. 2
      modules/core/include/opencv2/core/persistence.hpp
  2. 6
      modules/core/src/persistence.cpp
  3. 3
      modules/legacy/src/em.cpp
  4. 3
      modules/objdetect/src/hog.cpp

@ -186,7 +186,7 @@ public:
//! the full constructor that opens file storage for reading or writing
CV_WRAP FileStorage(const String& source, int flags, const String& encoding=String());
//! the constructor that takes pointer to the C FileStorage structure
FileStorage(CvFileStorage* fs);
FileStorage(CvFileStorage* fs, bool owning=true);
//! the destructor. calls release()
virtual ~FileStorage();

@ -5129,9 +5129,11 @@ FileStorage::FileStorage(const String& filename, int flags, const String& encodi
open( filename, flags, encoding );
}
FileStorage::FileStorage(CvFileStorage* _fs)
FileStorage::FileStorage(CvFileStorage* _fs, bool owning)
{
fs = Ptr<CvFileStorage>(_fs);
if (owning) fs.reset(_fs);
else fs = Ptr<CvFileStorage>(Ptr<CvFileStorage>(), _fs);
state = _fs ? NAME_EXPECTED + INSIDE_MAP : UNDEFINED;
}

@ -85,13 +85,12 @@ void CvEM::read( CvFileStorage* fs, CvFileNode* node )
void CvEM::write( CvFileStorage* _fs, const char* name ) const
{
FileStorage fs = _fs;
FileStorage fs(_fs, false);
if(name)
fs << name << "{";
emObj.write(fs);
if(name)
fs << "}";
fs.fs.obj = 0;
}
double CvEM::calcLikelihood( const Mat &input_sample ) const

@ -1353,8 +1353,7 @@ public:
{
if(ptr && _fs)
{
FileStorage fs(_fs);
fs.fs.addref();
FileStorage fs(_fs, false);
((const _ClsName*)ptr)->write(fs, String(name));
}
}

Loading…
Cancel
Save