PIValueTree

This commit is contained in:
2022-11-29 09:17:19 +03:00
parent d3d2b4281c
commit a516acbd44
4 changed files with 56 additions and 12 deletions

View File

@@ -29,6 +29,16 @@
//! \~russian
//!
const char PIValueTree::attributeArrayType [] = "arrayType" ;
const char PIValueTree::attributeArrayMinCount[] = "arrayMinCount";
const char PIValueTree::attributeArrayMaxCount[] = "arrayMaxCount";
const char PIValueTree::attributeMinimum [] = "minimum" ;
const char PIValueTree::attributeMaximum [] = "maximum" ;
const char PIValueTree::attributeSingleStep [] = "singleStep" ;
const char PIValueTree::attributeDecimals [] = "decimals" ;
const char PIValueTree::attributePrefix [] = "prefix" ;
const char PIValueTree::attributeSuffix [] = "suffix" ;
PIValueTree::PIValueTree() {
@@ -40,9 +50,10 @@ PIValueTree::PIValueTree(const PIVariant & v) {
}
PIValueTree::PIValueTree(const PIString & n, const PIVariant & v) {
PIValueTree::PIValueTree(const PIString & n, const PIVariant & v, const PIVariantMap & a) {
setName(n);
setValue(v);
_attributes = a;
}
@@ -64,6 +75,28 @@ void PIValueTree::setValue(const PIVariant & v) {
}
void PIValueTree::setAttribute(const PIString & n, const PIVariant & a) {
if (_is_null) return;
_attributes[n] = a;
}
void PIValueTree::mergeAttributes(const PIVariantMap & a) {
if (_is_null) return;
auto it = a.makeIterator();
while (it.next()) {
if (!_attributes.contains(it.key()))
_attributes.insert(it.key(), it.value());
}
}
void PIValueTree::setStandardFlag(FlagStandard flag, bool on) {
if (on) _flags[Standard] |= flag;
else _flags[Standard] &= ~flag;
}
bool PIValueTree::contains(const PIString & name) const {
if (_is_null) return true;
for (const auto & c: _children)

View File

@@ -35,7 +35,7 @@ class PIP_EXPORT PIValueTree {
public:
PIValueTree();
PIValueTree(const PIVariant & v);
PIValueTree(const PIString & n, const PIVariant & v);
PIValueTree(const PIString & n, const PIVariant & v, const PIVariantMap & a = PIVariantMap());
enum FlagsRole {
Standard,
@@ -51,20 +51,22 @@ public:
ArrayResize = 0x1002,
};
static constexpr char attributeArrayType [] = "arrayType" ;
static constexpr char attributeArrayMinCount[] = "arrayMinCount";
static constexpr char attributeArrayMaxCount[] = "arrayMaxCount";
static const char attributeArrayType [];
static const char attributeArrayMinCount[];
static const char attributeArrayMaxCount[];
static constexpr char attributeMinimum [] = "minimum" ;
static constexpr char attributeMaximum [] = "maximum" ;
static constexpr char attributeSingleStep [] = "singleStep" ;
static constexpr char attributeDecimals [] = "decimals" ;
static constexpr char attributePrefix [] = "prefix" ;
static constexpr char attributeSuffix [] = "suffix" ;
static const char attributeMinimum [];
static const char attributeMaximum [];
static const char attributeSingleStep [];
static const char attributeDecimals [];
static const char attributePrefix [];
static const char attributeSuffix [];
//static constexpr char attribute[] = "";
bool isNull() const {return _is_null;}
bool isValid() const {return _value.isValid();}
bool isArray() const {return _attributes.contains(attributeArrayType);}
bool hasChildren() const {return _children.isNotEmpty();}
const PIString & name() const {return _name;}
void setName(const PIString & n);
@@ -77,9 +79,13 @@ public:
const PIVariantMap & attributes() const {return _attributes;}
PIVariantMap & attributes() {return _attributes;}
void setAttribute(const PIString & n, const PIVariant & a);
void mergeAttributes(const PIVariantMap & a);
PIFlags<FlagStandard> flagsStandard() {return _flags[Standard];}
uint flags(FlagsRole role) {return _flags[role];}
void setStandardFlag(FlagStandard flag, bool on = true);
void setFlags(FlagsRole role, uint value) {_flags[role] = value;}
const PIVector<PIValueTree> & children() const {return _children;}

View File

@@ -235,6 +235,11 @@ PIVariant::Type PIVariant::typeFromID(uint type_id) {
}
uint PIVariant::typeIDFromName(const PIString & tname) {
return tname.hash();
}
uint PIVariant::typeIDFromType(Type type) {
switch (type) {
case (PIVariant::pivBool ): return typeID<bool >();

View File

@@ -739,7 +739,7 @@ public:
//! \~english Returns type from its name.
//! \~russian Возвращает тип из его названия.
static uint typeIDFromName(const PIString & tname) {return tname.hash();}
static uint typeIDFromName(const PIString & tname);
//! \~english Returns type ID from standard type.
//! \~russian Возвращает ID типа от стандатного типа.