PIValueTreeConversions start
This commit is contained in:
@@ -54,5 +54,6 @@
|
|||||||
#include "pibinarystream.h"
|
#include "pibinarystream.h"
|
||||||
#include "pichunkstream.h"
|
#include "pichunkstream.h"
|
||||||
#include "pijson.h"
|
#include "pijson.h"
|
||||||
|
#include "pivaluetree_conversions.h"
|
||||||
|
|
||||||
#endif // PISERIALIZATIONMODULE_H
|
#endif // PISERIALIZATIONMODULE_H
|
||||||
|
|||||||
120
libs/main/serialization/pivaluetree_conversions.cpp
Normal file
120
libs/main/serialization/pivaluetree_conversions.cpp
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
PIP - Platform Independent Primitives
|
||||||
|
PIValueTree conversions
|
||||||
|
Ivan Pelipenko peri4ko@yandex.ru
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "pivaluetree_conversions.h"
|
||||||
|
#include "pipropertystorage.h"
|
||||||
|
#include "pijson.h"
|
||||||
|
#include "piiostring.h"
|
||||||
|
|
||||||
|
|
||||||
|
PIValueTree PIValueTreeConversions::fromPropertyStorage(const PIPropertyStorage & ps) {
|
||||||
|
PIValueTree ret;
|
||||||
|
for (const auto & i: ps) {
|
||||||
|
PIValueTree v;
|
||||||
|
v.setName(i.name);
|
||||||
|
v.setValue(i.value);
|
||||||
|
v.setComment(i.comment);
|
||||||
|
ret.addChild(v);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIValueTree fromJSONTree(const PIJSON & json) {
|
||||||
|
PIValueTree ret;
|
||||||
|
ret.setName(json["name"].toString());
|
||||||
|
ret.setComment(json["comment"].toString());
|
||||||
|
PIString value_str = json["value"].toString();
|
||||||
|
PIVariant value = PIVariant::fromType(json["type"].toString());
|
||||||
|
if (value_str.isNotEmpty()) {
|
||||||
|
if (value.isValid())
|
||||||
|
value.setValueFromString(value_str);
|
||||||
|
else
|
||||||
|
value = value_str;
|
||||||
|
}
|
||||||
|
ret.setValue(value);
|
||||||
|
const PIJSON & attr(json["attributes"]);
|
||||||
|
for (const auto & i: attr.object())
|
||||||
|
ret.attributes()[i.first] = i.second.value();
|
||||||
|
bool is_array = ret.isArray();
|
||||||
|
int chindex = 0;
|
||||||
|
const PIJSON & chl(json["children"]);
|
||||||
|
for (const auto & i: chl.array()) {
|
||||||
|
PIValueTree c = fromJSONTree(i);
|
||||||
|
if (is_array) c.setName(PIString::fromNumber(chindex++));
|
||||||
|
ret.addChild(c);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIValueTree PIValueTreeConversions::fromJSON(const PIJSON & json) {
|
||||||
|
PIValueTree ret;
|
||||||
|
if (json.isObject()) ret = fromJSONTree(json);
|
||||||
|
if (json.isArray()) {
|
||||||
|
for (const auto & i: json.array())
|
||||||
|
ret.addChild(fromJSONTree(i));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIValueTree PIValueTreeConversions::fromText(PIIODevice * device) {
|
||||||
|
PIValueTree ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIJSON toJSONTree(const PIValueTree & root) {
|
||||||
|
PIJSON ret = PIJSON::newObject();
|
||||||
|
if (root.name().isNotEmpty())
|
||||||
|
ret["name"] = root.name();
|
||||||
|
if (root.comment().isNotEmpty())
|
||||||
|
ret["comment"] = root.comment();
|
||||||
|
if (root.value().isValid()) {
|
||||||
|
ret["type"] = root.value().typeName();
|
||||||
|
ret["value"] = root.value().toString();
|
||||||
|
}
|
||||||
|
if (root.attributes().isNotEmpty()) {
|
||||||
|
PIJSON j;
|
||||||
|
for (const auto & a: root.attributes())
|
||||||
|
j[a.first] = a.second.toString();
|
||||||
|
ret["attributes"] = j;
|
||||||
|
}
|
||||||
|
if (root.hasChildren()) {
|
||||||
|
PIJSON j;
|
||||||
|
for (const auto & c: root.children())
|
||||||
|
j << toJSONTree(c);
|
||||||
|
ret["children"] = j;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIJSON PIValueTreeConversions::toJSON(const PIValueTree & root) {
|
||||||
|
PIJSON ret = PIJSON::newArray();
|
||||||
|
for (const auto & c: root.children())
|
||||||
|
ret << toJSONTree(c);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIString PIValueTreeConversions::toText(const PIValueTree & root) {
|
||||||
|
PIString ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
43
libs/main/serialization/pivaluetree_conversions.h
Normal file
43
libs/main/serialization/pivaluetree_conversions.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*! \file pivaluetree_conversions.h
|
||||||
|
* \ingroup Serialization
|
||||||
|
* \brief
|
||||||
|
* \~english PIValueTree conversions
|
||||||
|
* \~russian Преобразования PIValueTree
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
PIP - Platform Independent Primitives
|
||||||
|
PIValueTree conversions
|
||||||
|
Ivan Pelipenko peri4ko@yandex.ru
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef pivaluetree_conversions_H
|
||||||
|
#define pivaluetree_conversions_H
|
||||||
|
|
||||||
|
#include "pivaluetree.h"
|
||||||
|
|
||||||
|
class PIPropertyStorage;
|
||||||
|
class PIJSON;
|
||||||
|
class PIIODevice;
|
||||||
|
|
||||||
|
namespace PIValueTreeConversions {
|
||||||
|
PIP_EXPORT PIValueTree fromPropertyStorage(const PIPropertyStorage & ps);
|
||||||
|
PIP_EXPORT PIValueTree fromJSON(const PIJSON & json);
|
||||||
|
PIP_EXPORT PIValueTree fromText(PIIODevice * device);
|
||||||
|
PIP_EXPORT PIJSON toJSON(const PIValueTree & root);
|
||||||
|
PIP_EXPORT PIString toText(const PIValueTree & root);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -109,8 +109,7 @@ BINARY_STREAM_WRITE(PIValueTree) {
|
|||||||
.add(2, v._comment)
|
.add(2, v._comment)
|
||||||
.add(3, v._attributes)
|
.add(3, v._attributes)
|
||||||
.add(4, v._value)
|
.add(4, v._value)
|
||||||
.add(5, v._name)
|
.add(5, v._children);
|
||||||
.add(6, v._children);
|
|
||||||
s << cs.data();
|
s << cs.data();
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@@ -127,8 +126,7 @@ BINARY_STREAM_READ (PIValueTree) {
|
|||||||
case 2: cs.get(v._comment);
|
case 2: cs.get(v._comment);
|
||||||
case 3: cs.get(v._attributes);
|
case 3: cs.get(v._attributes);
|
||||||
case 4: cs.get(v._value);
|
case 4: cs.get(v._value);
|
||||||
case 5: cs.get(v._name);
|
case 5: cs.get(v._children);
|
||||||
case 6: cs.get(v._children);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ PIVariant::Type PIVariant::typeFromName(const PIString & tname) {
|
|||||||
if (s == "pibitarray" || s == "bitarray") return PIVariant::pivBitArray;
|
if (s == "pibitarray" || s == "bitarray") return PIVariant::pivBitArray;
|
||||||
if (s == "pibytearray" || s == "bytearray" || s == "vector<uchar>" || s == "pivector<uchar>" || s == "vector<unsignedchar>" || s == "pivector<unsignedchar>" ||
|
if (s == "pibytearray" || s == "bytearray" || s == "vector<uchar>" || s == "pivector<uchar>" || s == "vector<unsignedchar>" || s == "pivector<unsignedchar>" ||
|
||||||
s == "vector<char>" || s == "pivector<char>") return PIVariant::pivByteArray;
|
s == "vector<char>" || s == "pivector<char>") return PIVariant::pivByteArray;
|
||||||
if (s == "pistring" || s == "string") return PIVariant::pivString;
|
if (s == "pistring" || s == "string" || s == "text") return PIVariant::pivString;
|
||||||
if (s == "pistringlist" || s == "stringlist" || s == "vector<string>" || s == "vector<pistring>" || s == "pivector<string>" || s == "pivector<pistring>") return PIVariant::pivStringList;
|
if (s == "pistringlist" || s == "stringlist" || s == "vector<string>" || s == "vector<pistring>" || s == "pivector<string>" || s == "pivector<pistring>") return PIVariant::pivStringList;
|
||||||
if (s == "pitime" || s == "time") return PIVariant::pivTime;
|
if (s == "pitime" || s == "time") return PIVariant::pivTime;
|
||||||
if (s == "pidate" || s == "date") return PIVariant::pivDate;
|
if (s == "pidate" || s == "date") return PIVariant::pivDate;
|
||||||
@@ -221,12 +221,12 @@ PIVariant::Type PIVariant::typeFromID(uint type_id) {
|
|||||||
if (type_id == typeID<PIVariantTypes::File>()) return PIVariant::pivFile;
|
if (type_id == typeID<PIVariantTypes::File>()) return PIVariant::pivFile;
|
||||||
if (type_id == typeID<PIVariantTypes::Dir>()) return PIVariant::pivDir;
|
if (type_id == typeID<PIVariantTypes::Dir>()) return PIVariant::pivDir;
|
||||||
if (type_id == typeID<PIVariantTypes::Color>()) return PIVariant::pivColor;
|
if (type_id == typeID<PIVariantTypes::Color>()) return PIVariant::pivColor;
|
||||||
|
if (type_id == typeID<PIVariantTypes::IODevice>()) return PIVariant::pivIODevice;
|
||||||
if (type_id == typeID<PIPointd>()) return PIVariant::pivPoint;
|
if (type_id == typeID<PIPointd>()) return PIVariant::pivPoint;
|
||||||
if (type_id == typeID<PIRectd>()) return PIVariant::pivRect;
|
if (type_id == typeID<PIRectd>()) return PIVariant::pivRect;
|
||||||
if (type_id == typeID<PIMathVectord>()) return PIVariant::pivMathVector;
|
if (type_id == typeID<PIMathVectord>()) return PIVariant::pivMathVector;
|
||||||
if (type_id == typeID<PIMathMatrixd>()) return PIVariant::pivMathMatrix;
|
if (type_id == typeID<PIMathMatrixd>()) return PIVariant::pivMathMatrix;
|
||||||
if (type_id == typeID<PILined>()) return PIVariant::pivLine;
|
if (type_id == typeID<PILined>()) return PIVariant::pivLine;
|
||||||
if (type_id == typeID<PIVariantTypes::IODevice>()) return PIVariant::pivIODevice;
|
|
||||||
#ifdef CUSTOM_PIVARIANT
|
#ifdef CUSTOM_PIVARIANT
|
||||||
if (__PIVariantInfoStorage__::get()->map->contains(type_id))
|
if (__PIVariantInfoStorage__::get()->map->contains(type_id))
|
||||||
return PIVariant::pivCustom;
|
return PIVariant::pivCustom;
|
||||||
@@ -271,12 +271,12 @@ uint PIVariant::typeIDFromType(Type type) {
|
|||||||
case (PIVariant::pivFile ): return typeID<PIVariantTypes::File >();
|
case (PIVariant::pivFile ): return typeID<PIVariantTypes::File >();
|
||||||
case (PIVariant::pivDir ): return typeID<PIVariantTypes::Dir >();
|
case (PIVariant::pivDir ): return typeID<PIVariantTypes::Dir >();
|
||||||
case (PIVariant::pivColor ): return typeID<PIVariantTypes::Color >();
|
case (PIVariant::pivColor ): return typeID<PIVariantTypes::Color >();
|
||||||
|
case (PIVariant::pivIODevice ): return typeID<PIVariantTypes::IODevice >();
|
||||||
case (PIVariant::pivPoint ): return typeID<PIPointd >();
|
case (PIVariant::pivPoint ): return typeID<PIPointd >();
|
||||||
case (PIVariant::pivRect ): return typeID<PIRectd >();
|
case (PIVariant::pivRect ): return typeID<PIRectd >();
|
||||||
case (PIVariant::pivMathVector): return typeID<PIMathVectord >();
|
case (PIVariant::pivMathVector): return typeID<PIMathVectord >();
|
||||||
case (PIVariant::pivMathMatrix): return typeID<PIMathMatrixd >();
|
case (PIVariant::pivMathMatrix): return typeID<PIMathMatrixd >();
|
||||||
case (PIVariant::pivLine ): return typeID<PILined >();
|
case (PIVariant::pivLine ): return typeID<PILined >();
|
||||||
case (PIVariant::pivIODevice ): return typeID<PIVariantTypes::IODevice >();
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -385,11 +385,11 @@ PIString PIVariant::typeName(PIVariant::Type type) {
|
|||||||
case PIVariant::pivFile: return "File";
|
case PIVariant::pivFile: return "File";
|
||||||
case PIVariant::pivDir: return "Dir";
|
case PIVariant::pivDir: return "Dir";
|
||||||
case PIVariant::pivColor: return "Color";
|
case PIVariant::pivColor: return "Color";
|
||||||
|
case PIVariant::pivIODevice: return "IODevice";
|
||||||
case PIVariant::pivPoint: return "Point";
|
case PIVariant::pivPoint: return "Point";
|
||||||
case PIVariant::pivRect: return "Rect";
|
case PIVariant::pivRect: return "Rect";
|
||||||
case PIVariant::pivMathVector: return "Vector";
|
case PIVariant::pivMathVector: return "Vector";
|
||||||
case PIVariant::pivMathMatrix: return "Matrix";
|
case PIVariant::pivMathMatrix: return "Matrix";
|
||||||
case PIVariant::pivIODevice: return "IODevice";
|
|
||||||
case PIVariant::pivCustom: return "Custom";
|
case PIVariant::pivCustom: return "Custom";
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user