git-svn-id: svn://db.shs.com.ru/pip@296 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
22
main.cpp
22
main.cpp
@@ -1,7 +1,27 @@
|
|||||||
#include "pip.h"
|
#include "pip.h"
|
||||||
|
|
||||||
|
struct __S__ {
|
||||||
|
PIString text;
|
||||||
|
int i;
|
||||||
|
};
|
||||||
|
inline PIByteArray & operator <<(PIByteArray & s, const __S__ & v) {s << v.text << v.i; return s;}
|
||||||
|
inline PIByteArray & operator >>(PIByteArray & s, __S__ & v) {s >> v.text >> v.i; return s;}
|
||||||
|
|
||||||
|
REGISTER_VARIANT(__S__)
|
||||||
|
REGISTER_VARIANT_CAST(__S__, PIString) {return v.text + PIString::fromNumber(v.i);}
|
||||||
|
REGISTER_VARIANT_CAST(__S__, int) {return v.i;}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
sleep(30);
|
__S__ s, s1;
|
||||||
|
s.text = "123";
|
||||||
|
s.i = -1;
|
||||||
|
PIVariant v = PIVariant::fromValue(s);
|
||||||
|
piCout << v;
|
||||||
|
s1 = v.value<__S__>();
|
||||||
|
piCout << s1.text << s1.i << v.value<int>();
|
||||||
|
PIPropertyStorage ps;
|
||||||
|
piForeachC (PIPropertyStorage::Property & p, ps)
|
||||||
|
;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,5 +28,6 @@
|
|||||||
#include "pivariant.h"
|
#include "pivariant.h"
|
||||||
#include "picli.h"
|
#include "picli.h"
|
||||||
#include "pichunkstream.h"
|
#include "pichunkstream.h"
|
||||||
|
#include "pipropertystorage.h"
|
||||||
|
|
||||||
#endif // PICOREMODULE_H
|
#endif // PICOREMODULE_H
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public:
|
|||||||
|
|
||||||
typedef PIVector<Property>::const_iterator const_iterator;
|
typedef PIVector<Property>::const_iterator const_iterator;
|
||||||
typedef PIVector<Property>::iterator iterator;
|
typedef PIVector<Property>::iterator iterator;
|
||||||
|
typedef Property value_type;
|
||||||
|
|
||||||
iterator begin() {return props.begin();}
|
iterator begin() {return props.begin();}
|
||||||
const_iterator begin() const {return props.begin();}
|
const_iterator begin() const {return props.begin();}
|
||||||
|
|||||||
@@ -125,6 +125,19 @@ classname_to __PIVariantFunctions__<classname_from>::castVariant<classname_to>(c
|
|||||||
#define REGISTER_VARIANT_CAST_SIMPLE_H(classname_from, classname_to) REGISTER_VARIANT_CAST_H(classname_from, classname_to)
|
#define REGISTER_VARIANT_CAST_SIMPLE_H(classname_from, classname_to) REGISTER_VARIANT_CAST_H(classname_from, classname_to)
|
||||||
#define REGISTER_VARIANT_CAST_SIMPLE_CPP(classname_from, classname_to) REGISTER_VARIANT_CAST_CPP(classname_from, classname_to) {return classname_to(v);}
|
#define REGISTER_VARIANT_CAST_SIMPLE_CPP(classname_from, classname_to) REGISTER_VARIANT_CAST_CPP(classname_from, classname_to) {return classname_to(v);}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define REGISTER_VARIANT_H(classname)
|
||||||
|
#define REGISTER_VARIANT_CPP(classname)
|
||||||
|
#define INIT_VARIANT(classname)
|
||||||
|
#define REGISTER_VARIANT(classname)
|
||||||
|
#define REGISTER_VARIANT_CAST_H(classname_from, classname_to)
|
||||||
|
#define REGISTER_VARIANT_CAST_CPP(classname_from, classname_to)
|
||||||
|
#define REGISTER_VARIANT_CAST(classname_from, classname_to)
|
||||||
|
#define REGISTER_VARIANT_CAST_SIMPLE(classname_from, classname_to)
|
||||||
|
#define REGISTER_VARIANT_CAST_SIMPLE_H(classname_from, classname_to)
|
||||||
|
#define REGISTER_VARIANT_CAST_SIMPLE_CPP(classname_from, classname_to)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class PIP_EXPORT PIVariant {
|
class PIP_EXPORT PIVariant {
|
||||||
@@ -461,8 +474,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void destroy() {_content.clear();}
|
void destroy() {_content.clear();}
|
||||||
template <typename T> static Type getType() {return pivCustom;}
|
template <typename T> inline static Type getType() {return pivCustom;}
|
||||||
template <typename T> void initType(const T & v) {
|
template <typename T> inline void initType(const T & v) {
|
||||||
_content.clear();
|
_content.clear();
|
||||||
_content << v;
|
_content << v;
|
||||||
_type = getType<T>();
|
_type = getType<T>();
|
||||||
@@ -475,17 +488,17 @@ private:
|
|||||||
_info = 0;
|
_info = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
template<typename T> static T getAsValue(const PIVariant & v) {
|
template<typename T> inline static T getAsValue(const PIVariant & v) {
|
||||||
#ifdef CUSTOM_PIVARIANT
|
#ifdef CUSTOM_PIVARIANT
|
||||||
if (v._content.isEmpty() || !v._info) return T();
|
if (v._content.isEmpty() || !v._info) return T();
|
||||||
PIString cn = __PIVariantFunctions__<T>::typeNameHelper();
|
PIString cn = __PIVariantFunctions__<T>::typeNameHelper();
|
||||||
piCout << "gav" << cn;
|
//piCout << "gav" << cn;
|
||||||
PIByteArray ba;
|
PIByteArray ba;
|
||||||
if (cn == v._info->typeName) {
|
if (cn == v._info->typeName) {
|
||||||
ba = v._content;
|
ba = v._content;
|
||||||
} else {
|
} else {
|
||||||
__PIVariantInfo__::castHelperFunc cf = v._info->cast.value(cn);
|
__PIVariantInfo__::castHelperFunc cf = v._info->cast.value(cn);
|
||||||
piCout << "gav cast" << cf;
|
//piCout << "gav cast" << cf;
|
||||||
if (!cf) return T();
|
if (!cf) return T();
|
||||||
ba = cf(v._content);
|
ba = cf(v._content);
|
||||||
}
|
}
|
||||||
@@ -575,6 +588,29 @@ template<> inline PIVariant::Type PIVariant::getType<PIDate>() {return PIVariant
|
|||||||
template<> inline PIVariant::Type PIVariant::getType<PIDateTime>() {return PIVariant::pivDateTime;}
|
template<> inline PIVariant::Type PIVariant::getType<PIDateTime>() {return PIVariant::pivDateTime;}
|
||||||
template<> inline PIVariant::Type PIVariant::getType<PISystemTime>() {return PIVariant::pivSystemTime;}
|
template<> inline PIVariant::Type PIVariant::getType<PISystemTime>() {return PIVariant::pivSystemTime;}
|
||||||
|
|
||||||
|
REGISTER_VARIANT(bool)
|
||||||
|
REGISTER_VARIANT(char)
|
||||||
|
REGISTER_VARIANT(uchar)
|
||||||
|
REGISTER_VARIANT(short)
|
||||||
|
REGISTER_VARIANT(ushort)
|
||||||
|
REGISTER_VARIANT(int)
|
||||||
|
REGISTER_VARIANT(uint)
|
||||||
|
REGISTER_VARIANT(llong)
|
||||||
|
REGISTER_VARIANT(ullong)
|
||||||
|
REGISTER_VARIANT(float)
|
||||||
|
REGISTER_VARIANT(double)
|
||||||
|
REGISTER_VARIANT(ldouble)
|
||||||
|
REGISTER_VARIANT(complexd)
|
||||||
|
REGISTER_VARIANT(complexld)
|
||||||
|
REGISTER_VARIANT(PIBitArray)
|
||||||
|
REGISTER_VARIANT(PIByteArray)
|
||||||
|
REGISTER_VARIANT(PIString)
|
||||||
|
REGISTER_VARIANT(PIStringList)
|
||||||
|
REGISTER_VARIANT(PITime)
|
||||||
|
REGISTER_VARIANT(PIDate)
|
||||||
|
REGISTER_VARIANT(PIDateTime)
|
||||||
|
REGISTER_VARIANT(PISystemTime)
|
||||||
|
|
||||||
inline PICout operator <<(PICout s, const PIVariant & v) {
|
inline PICout operator <<(PICout s, const PIVariant & v) {
|
||||||
s.space(); s.setControl(0, true);
|
s.space(); s.setControl(0, true);
|
||||||
s << "PIVariant(" << v.typeName() << ", " << v.toString() << ")";
|
s << "PIVariant(" << v.typeName() << ", " << v.toString() << ")";
|
||||||
|
|||||||
Reference in New Issue
Block a user