Files
Webcam/include/framework/metafile/nml_file.cpp

84 lines
2.8 KiB
C++

/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#include "metafile/nml.h"
#include "alloc/ialloc.h"
using namespace GS::NML;
//------------------------------------------------------------------------------
bool File::GetBool(const char *path, bool dflt, bool verbose) const {
Tag *t = GetTypedTag(path, Variant::VariantBool, verbose);
return t ? t->GetBool() : dflt;
}
int File::GetInteger(const char *path, int dflt, bool verbose) const {
Tag *t = GetTypedTag(path, Variant::VariantInteger, verbose);
return t ? t->GetInteger() : dflt;
}
float File::GetReal(const char *path, float dflt, bool verbose) const {
Tag *t = GetTypedTag(path, Variant::VariantFloat, verbose);
return t ? t->GetReal() : dflt;
}
const char *File::GetString(const char *path, const char *dflt, bool verbose) const {
Tag *t = GetTypedTag(path, Variant::VariantString, verbose);
return t ? t->GetString() : dflt;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void File::Import(const File &src, bool clear_before_import) {
if (clear_before_import)
Clear();
ListForeachPtr(Tag *, tag, src.GetTags())
AddRoot(tag->Clone());
}
File *File::Clone() const {
File *clone = new File;
if (!clone)
return NULL;
if (!name.IsEmpty())
clone->name = name.c_str();
clone->Import(*this);
return clone;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
Tag *File::AddRoot(Tag *t) {
if (!t)
return NULL;
if (!tags.Add(t))
return NULL;
return t;
}
Tag *File::AddRoot(const char *name) { return AddRoot(new Tag(name)); }
Tag *File::AddRoot(const char *name, bool v) { return AddRoot(new Tag(name, v)); }
Tag *File::AddRoot(const char *name, int v) { return AddRoot(new Tag(name, v)); }
Tag *File::AddRoot(const char *name, float v) { return AddRoot(new Tag(name, v)); }
Tag *File::AddRoot(const char *name, const char *s) { return AddRoot(new Tag(name, s)); }
Tag *File::AddRoot(const char *name, void *d, size_t s) { return AddRoot(new Tag(name, d, s)); }
bool File::UnlinkRoot(Tag *t) { return tags.Remove(t); }
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void File::Free() {
ListDeleteAllPtr(Tag *, tags);
name.Clear();
}
File::~File() { Free(); }
//------------------------------------------------------------------------------