PIValueTree::readChildValue method
some child-oriented methods allow to create JSON from single PIValueTree
This commit is contained in:
@@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
|||||||
project(PIP)
|
project(PIP)
|
||||||
set(PIP_MAJOR 3)
|
set(PIP_MAJOR 3)
|
||||||
set(PIP_MINOR 10)
|
set(PIP_MINOR 10)
|
||||||
set(PIP_REVISION 2)
|
set(PIP_REVISION 3)
|
||||||
set(PIP_SUFFIX )
|
set(PIP_SUFFIX )
|
||||||
set(PIP_COMPANY SHS)
|
set(PIP_COMPANY SHS)
|
||||||
set(PIP_DOMAIN org.SHS)
|
set(PIP_DOMAIN org.SHS)
|
||||||
|
|||||||
@@ -252,6 +252,7 @@ PIJSON toJSONTree(const PIValueTree & root, PIValueTreeConversions::Options opti
|
|||||||
|
|
||||||
|
|
||||||
PIJSON PIValueTreeConversions::toJSON(const PIValueTree & root, Options options) {
|
PIJSON PIValueTreeConversions::toJSON(const PIValueTree & root, Options options) {
|
||||||
|
if (options[IncludeRoot]) return toJSONTree(root, options);
|
||||||
PIJSON ret = PIJSON::newArray();
|
PIJSON ret = PIJSON::newArray();
|
||||||
for (const auto & c: root.children())
|
for (const auto & c: root.children())
|
||||||
ret << toJSONTree(c, options);
|
ret << toJSONTree(c, options);
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ enum Option {
|
|||||||
WithAttributes = 0x1,
|
WithAttributes = 0x1,
|
||||||
WithComment = 0x2,
|
WithComment = 0x2,
|
||||||
WithType = 0x4,
|
WithType = 0x4,
|
||||||
WithAll = 0xFFFFFF,
|
WithAll = 0xFFF,
|
||||||
|
IncludeRoot = 0x1000,
|
||||||
Default = WithAll
|
Default = WithAll
|
||||||
};
|
};
|
||||||
typedef PIFlags<Option> Options;
|
typedef PIFlags<Option> Options;
|
||||||
|
|||||||
@@ -146,6 +146,14 @@ bool PIValueTree::contains(const PIStringList & path) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PIValueTree::childIndex(const PIString & name) const {
|
||||||
|
if (_is_null) return -1;
|
||||||
|
for (int i = 0; i < _children.size_s(); ++i)
|
||||||
|
if (_children[i].name() == name) return i;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const PIValueTree & PIValueTree::child(const PIString & name) const {
|
const PIValueTree & PIValueTree::child(const PIString & name) const {
|
||||||
if (_is_null) return *this;
|
if (_is_null) return *this;
|
||||||
for (const auto & c: _children)
|
for (const auto & c: _children)
|
||||||
@@ -162,6 +170,18 @@ PIValueTree & PIValueTree::child(const PIString & name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIValueTree & PIValueTree::insertChild(int index, const PIValueTree & n) {
|
||||||
|
if (_is_null) return *this;
|
||||||
|
for (auto & c: _children)
|
||||||
|
if (c.name() == n.name()) {
|
||||||
|
c = n;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
_children.insert(piClampi(index, 0, _children.size_s()), n);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PIValueTree & PIValueTree::addChild(const PIValueTree & n) {
|
PIValueTree & PIValueTree::addChild(const PIValueTree & n) {
|
||||||
if (_is_null) return *this;
|
if (_is_null) return *this;
|
||||||
for (auto & c: _children)
|
for (auto & c: _children)
|
||||||
|
|||||||
@@ -93,11 +93,18 @@ public:
|
|||||||
const PIVector<PIValueTree> & children() const { return _children; }
|
const PIVector<PIValueTree> & children() const { return _children; }
|
||||||
void clearChildren() { _children.clear(); }
|
void clearChildren() { _children.clear(); }
|
||||||
PIVariant childValue(const PIString & child_name, const PIVariant & default_value = PIVariant(), bool * exists = nullptr) const;
|
PIVariant childValue(const PIString & child_name, const PIVariant & default_value = PIVariant(), bool * exists = nullptr) const;
|
||||||
|
template<typename T>
|
||||||
|
PIValueTree & readChildValue(const PIString & child_name, T & read_to) {
|
||||||
|
if (contains(child_name)) read_to = child(child_name).value().value<T>();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
bool contains(const PIString & name) const;
|
bool contains(const PIString & name) const;
|
||||||
bool contains(const PIStringList & path) const;
|
bool contains(const PIStringList & path) const;
|
||||||
|
int childIndex(const PIString & name) const;
|
||||||
const PIValueTree & child(const PIString & name) const;
|
const PIValueTree & child(const PIString & name) const;
|
||||||
PIValueTree & child(const PIString & name);
|
PIValueTree & child(const PIString & name);
|
||||||
|
PIValueTree & insertChild(int index, const PIValueTree & n);
|
||||||
PIValueTree & addChild(const PIValueTree & n);
|
PIValueTree & addChild(const PIValueTree & n);
|
||||||
PIValueTree & addChildren(const PIVector<PIValueTree> & n);
|
PIValueTree & addChildren(const PIVector<PIValueTree> & n);
|
||||||
PIValueTree & remove(const PIString & name);
|
PIValueTree & remove(const PIString & name);
|
||||||
|
|||||||
Reference in New Issue
Block a user