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<CvFileStorage> fs;
string elname;
vector<char> structs;
int state;
};
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;
};
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;
};