XML/YAML 永続性 ================== .. highlight:: cpp .. index:: FileStorage .. _FileStorage: FileStorage ----------- .. ctype:: FileStorage XML/YAML ファイルストレージクラス. :: class FileStorage { public: enum { READ=0, WRITE=1, APPEND=2 }; enum { UNDEFINED=0, VALUE_EXPECTED=1, NAME_EXPECTED=2, INSIDE_MAP=4 }; // デフォルトコンストラクタ FileStorage(); // 読み込み (flags=FileStorage::READ) または 書き込み // (flags=FileStorage::WRITE) 用にファイルをオープンするコンストラクタ FileStorage(const string& filename, int flags); // 既にオープンされた CvFileStorage* をラップします. FileStorage(CvFileStorage* fs); // デストラクタ.必要ならばファイルをクローズします. virtual ~FileStorage(); // 指定されたファイルを,読み込み (flags=FileStorage::READ) // または書き込み (flags=FileStorage::WRITE) 用にオープンします. virtual bool open(const string& filename, int flags); // ストレージがオープンされているかをチェックします. virtual bool isOpened() const; // ファイルをクローズします. virtual void release(); // 最初のトップレベルノードを返します. FileNode getFirstTopLevelNode() const; // ルートファイルノード // (最初のトップレベルノードの親)を返します. FileNode root(int streamidx=0) const; // 名前で指定されたトップレベルノードを返します. FileNode operator[](const string& nodename) const; FileNode operator[](const char* nodename) const; // 内部の CvFileStorage* を返します. CvFileStorage* operator *() { return fs; } const CvFileStorage* operator *() const { return fs; } // 指定のフォーマット( DataType を参照)で, // 特定数の要素を書き込みます.ヘッダは書き込みません. void writeRaw( const string& fmt, const uchar* vec, size_t len ); // 古い形式のオブジェクト( CvMat, CvMatND など)を書き込みます. void writeObj( const string& name, const void* obj ); // ファイル名が与えられると,そのデフォルトオブジェクト名を返します. // ( cvSave() でデフォルトオブジェクト名を得る場合などに利用されます) static string getDefaultObjectName(const string& filename); Ptr fs; string elname; vector structs; int state; }; .. .. index:: FileNode .. _FileNode: FileNode -------- .. ctype:: FileNode XML/YAML ファイルノードクラス. :: class CV_EXPORTS FileNode { public: enum { NONE=0, INT=1, REAL=2, FLOAT=REAL, STR=3, STRING=STR, REF=4, SEQ=5, MAP=6, TYPE_MASK=7, FLOW=8, USER=16, EMPTY=32, NAMED=64 }; FileNode(); FileNode(const CvFileStorage* fs, const CvFileNode* node); FileNode(const FileNode& node); FileNode operator[](const string& nodename) const; FileNode operator[](const char* nodename) const; FileNode operator[](int i) const; int type() const; int rawDataSize(const string& fmt) const; bool empty() const; bool isNone() const; bool isSeq() const; bool isMap() const; bool isInt() const; bool isReal() const; bool isString() const; bool isNamed() const; string name() const; size_t size() const; operator int() const; operator float() const; operator double() const; operator string() const; FileNodeIterator begin() const; FileNodeIterator end() const; void readRaw( const string& fmt, uchar* vec, size_t len ) const; void* readObj() const; // 効率が低下するのでラッパーポインタクラスを利用しないでください. const CvFileStorage* fs; const CvFileNode* node; }; .. .. index:: FileNodeIterator .. _FileNodeIterator: FileNodeIterator ---------------- .. ctype:: FileNodeIterator XML/YAML ファイルノードイテレータクラス. :: class CV_EXPORTS FileNodeIterator { public: FileNodeIterator(); FileNodeIterator(const CvFileStorage* fs, const CvFileNode* node, size_t ofs=0); FileNodeIterator(const FileNodeIterator& it); FileNode operator *() const; FileNode operator ->() const; FileNodeIterator& operator ++(); FileNodeIterator operator ++(int); FileNodeIterator& operator --(); FileNodeIterator operator --(int); FileNodeIterator& operator += (int); FileNodeIterator& operator -= (int); FileNodeIterator& readRaw( const string& fmt, uchar* vec, size_t maxCount=(size_t)INT_MAX ); const CvFileStorage* fs; const CvFileNode* container; CvSeqReader reader; size_t remaining; }; ..