From: Koji Miyazato Date: Tue, 18 Mar 2014 14:29:30 +0000 (+0900) Subject: WriteStructContext treats state of fs X-Git-Tag: submit/tizen_ivi/20141117.190038~2^2~510^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a43ef9a6cd63275cca73963065c8f20b4806c83d;p=profile%2Fivi%2Fopencv.git WriteStructContext treats state of fs --- diff --git a/modules/core/include/opencv2/core/persistence.hpp b/modules/core/include/opencv2/core/persistence.hpp index e00c849..93f7381 100644 --- a/modules/core/include/opencv2/core/persistence.hpp +++ b/modules/core/include/opencv2/core/persistence.hpp @@ -697,9 +697,8 @@ void write(FileStorage& fs, const String& name, const Range& r ) template static inline void write( FileStorage& fs, const String& name, const std::vector<_Tp>& vec ) { - fs << (DataType<_Tp>::fmt != 0 ? "[:" : "["); + internal::WriteStructContext ws(fs, name, FileNode::SEQ+(DataType<_Tp>::fmt != 0 ? FileNode::FLOW : 0)); write(fs, vec); - fs << "]"; } static inline diff --git a/modules/core/src/persistence.cpp b/modules/core/src/persistence.cpp index 3755ecc..af6a23c 100644 --- a/modules/core/src/persistence.cpp +++ b/modules/core/src/persistence.cpp @@ -5486,11 +5486,28 @@ internal::WriteStructContext::WriteStructContext(FileStorage& _fs, { cvStartWriteStruct(**fs, !name.empty() ? name.c_str() : 0, flags, !typeName.empty() ? typeName.c_str() : 0); + if ((flags & FileNode::TYPE_MASK) == FileNode::SEQ) + { + fs->elname = String(); + fs->state = FileStorage::VALUE_EXPECTED; + fs->structs.push_back('['); + } + else + { + fs->elname = String(); + fs->state = FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP; + fs->structs.push_back('{'); + } } internal::WriteStructContext::~WriteStructContext() { cvEndWriteStruct(**fs); + fs->structs.pop_back(); + fs->state = fs->structs.empty() || fs->structs.back() == '{' ? + FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP : + FileStorage::VALUE_EXPECTED; + fs->elname = String(); }