提交 a50d75d3 编写于 作者: R Roman Donchenko

Made Filestorage able to not own its CvFileStorage instance.

This allows to get rid of the last remaining Ptr<T>::addref calls.
上级 3e189a2b
......@@ -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));
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册