git-svn-id: svn://db.shs.com.ru/pip@189 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -48,55 +48,24 @@
|
||||
* \endcode
|
||||
* */
|
||||
|
||||
PIMap<PIString, __PIVariantInfo__ * > * __PIVariantInfoStorage__::map = 0;
|
||||
|
||||
|
||||
PIVariant::PIVariant() {
|
||||
type_ = PIVariant::Invalid;
|
||||
memset(_vraw, 0, __PIVARIANT_UNION_SIZE__);
|
||||
_type = PIVariant::Invalid;
|
||||
}
|
||||
|
||||
|
||||
PIVariant & PIVariant::operator =(const PIVariant & v) {
|
||||
type_ = v.type_;
|
||||
memcpy(_vraw, v._vraw, __PIVARIANT_UNION_SIZE__);
|
||||
_vbytearray = v._vbytearray;
|
||||
_vbitarray = v._vbitarray;
|
||||
_vstring = v._vstring;
|
||||
_vstringlist = v._vstringlist;
|
||||
_vcustom = v._vcustom;
|
||||
_type = v._type;
|
||||
_content = v._content;
|
||||
_info = v._info;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
bool PIVariant::operator ==(const PIVariant & v) const {
|
||||
if (type_ != v.type_) return false;
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint == v._vint;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong == v._vllong;
|
||||
case PIVariant::Float: return _vfloat == v._vfloat;
|
||||
case PIVariant::Double: return _vdouble == v._vdouble;
|
||||
case PIVariant::LDouble: return _vldouble == v._vldouble;
|
||||
case PIVariant::Complexd: return _vcomplexd == _vvcomplexd(v);
|
||||
case PIVariant::Complexld: return _vcomplexld == _vvcomplexld(v);
|
||||
case PIVariant::BitArray: return _vbitarray == v._vbitarray;
|
||||
case PIVariant::ByteArray: return _vbytearray == v._vbytearray;
|
||||
case PIVariant::String: return _vstring == v._vstring;
|
||||
case PIVariant::StringList: return _vstringlist == v._vstringlist;
|
||||
case PIVariant::Time: return _vtime == _vvtime(v);
|
||||
case PIVariant::Date: return _vdate == _vvdate(v);
|
||||
case PIVariant::DateTime: return _vdatetime == _vvdatetime(v);
|
||||
case PIVariant::SystemTime: return _vsystime == _vvsystime(v);
|
||||
default: break;
|
||||
};
|
||||
return false;
|
||||
return (_type == v._type) && (_content == v._content);
|
||||
}
|
||||
|
||||
|
||||
@@ -106,12 +75,12 @@ PIVariant::Type PIVariant::typeFromName(const PIString & tname) {
|
||||
if (s == "char" || s == "sbyte") return PIVariant::Char;
|
||||
if (s == "short" || s == "shortint" || s == "signedshort" || s == "signedshortint" || s == "sword") return PIVariant::Short;
|
||||
if (s == "int" || s == "signed" || s == "signedint") return PIVariant::Int;
|
||||
if (s == "long" || s == "longint" || s == "signedlong" || s == "signedlongint" || s == "sdword") return PIVariant::Long;
|
||||
if (s == "long" || s == "longint" || s == "signedlong" || s == "signedlongint" || s == "sdword") return PIVariant::Int;
|
||||
if (s == "llong" || s == "longlong" || s == "longlongint" || s == "signedlonglong" || s == "signedlonglongint" || s == "sqword") return PIVariant::LLong;
|
||||
if (s == "uchar" || s == "byte") return PIVariant::UChar;
|
||||
if (s == "ushort" || s == "unsignedshort" || s == "unsignedshortint" || s == "word") return PIVariant::UShort;
|
||||
if (s == "uint" || s == "unsigned" || s == "unsignedint") return PIVariant::UInt;
|
||||
if (s == "ulong" || s == "unsignedlong" || s == "unsignedlongint" || s == "dword") return PIVariant::ULong;
|
||||
if (s == "ulong" || s == "unsignedlong" || s == "unsignedlongint" || s == "dword") return PIVariant::UInt;
|
||||
if (s == "ullong" || s == "unsignedlonglong" || s == "unsignedlonglongint" || s == "qword") return PIVariant::ULLong;
|
||||
if (s == "float") return PIVariant::Float;
|
||||
if (s == "double" || s == "real") return PIVariant::Double;
|
||||
@@ -131,6 +100,13 @@ PIVariant::Type PIVariant::typeFromName(const PIString & tname) {
|
||||
}
|
||||
|
||||
|
||||
PIString PIVariant::typeName() const {
|
||||
if ((_type == Custom) && _info)
|
||||
return _info->typeName;
|
||||
return typeName(_type);
|
||||
}
|
||||
|
||||
|
||||
PIString PIVariant::typeName(PIVariant::Type type) {
|
||||
switch (type) {
|
||||
case PIVariant::Bool: return "Bool";
|
||||
@@ -140,8 +116,6 @@ PIString PIVariant::typeName(PIVariant::Type type) {
|
||||
case PIVariant::UShort: return "UShort";
|
||||
case PIVariant::Int: return "Int";
|
||||
case PIVariant::UInt: return "UInt";
|
||||
case PIVariant::Long: return "Long";
|
||||
case PIVariant::ULong: return "ULong";
|
||||
case PIVariant::LLong: return "LLong";
|
||||
case PIVariant::ULLong: return "ULLong";
|
||||
case PIVariant::Float: return "Float";
|
||||
@@ -171,25 +145,26 @@ PIString PIVariant::typeName(PIVariant::Type type) {
|
||||
* otherwise returns \a PIString::toBool() of first string. \n
|
||||
* In case of other types returns \b false. */
|
||||
bool PIVariant::toBool() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint != 0;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong != 0;
|
||||
case PIVariant::Float: return _vfloat != 0;
|
||||
case PIVariant::Double: return _vdouble != 0;
|
||||
case PIVariant::LDouble: return _vldouble != 0;
|
||||
case PIVariant::Complexd: return _vcomplexd.real() != 0;
|
||||
case PIVariant::Complexld: return _vcomplexld.real() != 0;
|
||||
case PIVariant::String: return _vstring.toBool();
|
||||
case PIVariant::StringList: if (_vstringlist.isEmpty()) return false; return _vstringlist.front().toBool();
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return r;}
|
||||
case PIVariant::Char: {char r; ba >> r; return r != 0;}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return r != 0;}
|
||||
case PIVariant::Short: {short r; ba >> r; return r != 0;}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return r != 0;}
|
||||
case PIVariant::Int: {int r; ba >> r; return r != 0;}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return r != 0;}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return r != 0;}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return r != 0;}
|
||||
case PIVariant::Float: {float r; ba >> r; return r > 0.f;}
|
||||
case PIVariant::Double: {double r; ba >> r; return r > 0.;}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return r > 0.;}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return r.real() != 0;}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return r.real() != 0;}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r.toBool();}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return false; return r.front().toBool();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<bool>(*this);
|
||||
default: break;
|
||||
}
|
||||
return false;
|
||||
@@ -204,25 +179,26 @@ bool PIVariant::toBool() const {
|
||||
* otherwise returns \a PIString::toInt() of first string. \n
|
||||
* In case of other types returns \b 0. */
|
||||
int PIVariant::toInt() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong;
|
||||
case PIVariant::Float: return _vfloat;
|
||||
case PIVariant::Double: return _vdouble;
|
||||
case PIVariant::LDouble: return _vldouble;
|
||||
case PIVariant::Complexd: return _vcomplexd.real();
|
||||
case PIVariant::Complexld: return _vcomplexld.real();
|
||||
case PIVariant::String: return _vstring.toInt();
|
||||
case PIVariant::StringList: if (_vstringlist.isEmpty()) return 0; return _vstringlist.front().toInt();
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return r;}
|
||||
case PIVariant::Char: {char r; ba >> r; return r;}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return r;}
|
||||
case PIVariant::Short: {short r; ba >> r; return r;}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return r;}
|
||||
case PIVariant::Int: {int r; ba >> r; return r;}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return r;}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return r;}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return r;}
|
||||
case PIVariant::Float: {float r; ba >> r; return r;}
|
||||
case PIVariant::Double: {double r; ba >> r; return r;}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return r;}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return r.real();}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return r.real();}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r.toInt();}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return 0; return r.front().toInt();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<int>(*this);
|
||||
default: break;
|
||||
}
|
||||
return 0;
|
||||
@@ -236,26 +212,26 @@ int PIVariant::toInt() const {
|
||||
* otherwise returns \a PIString::toLLong() of first string. \n
|
||||
* In case of other types returns \b 0L. */
|
||||
llong PIVariant::toLLong() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong;
|
||||
case PIVariant::Float: return _vfloat;
|
||||
case PIVariant::Double: return _vdouble;
|
||||
case PIVariant::LDouble: return _vldouble;
|
||||
case PIVariant::Complexd: return _vcomplexd.real();
|
||||
case PIVariant::Complexld: return _vcomplexld.real();
|
||||
case PIVariant::String: return _vstring.toLLong();
|
||||
case PIVariant::StringList: if (_vstringlist.isEmpty()) return 0L; return _vstringlist.front().toLLong();
|
||||
default: break;
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return r;}
|
||||
case PIVariant::Char: {char r; ba >> r; return r;}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return r;}
|
||||
case PIVariant::Short: {short r; ba >> r; return r;}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return r;}
|
||||
case PIVariant::Int: {int r; ba >> r; return r;}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return r;}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return r;}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return r;}
|
||||
case PIVariant::Float: {float r; ba >> r; return r;}
|
||||
case PIVariant::Double: {double r; ba >> r; return r;}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return r;}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return r.real();}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return r.real();}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r.toLLong();}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return 0L; return r.front().toLLong();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<llong>(*this);
|
||||
}
|
||||
return 0L;
|
||||
}
|
||||
@@ -268,26 +244,26 @@ llong PIVariant::toLLong() const {
|
||||
* otherwise returns \a PIString::toFloat() of first string. \n
|
||||
* In case of other types returns \b 0.f. */
|
||||
float PIVariant::toFloat() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong;
|
||||
case PIVariant::Float: return _vfloat;
|
||||
case PIVariant::Double: return _vdouble;
|
||||
case PIVariant::LDouble: return _vldouble;
|
||||
case PIVariant::Complexd: return _vcomplexd.real();
|
||||
case PIVariant::Complexld: return _vcomplexld.real();
|
||||
case PIVariant::String: return _vstring.toFloat();
|
||||
case PIVariant::StringList: if (_vstringlist.isEmpty()) return 0.f; return _vstringlist.front().toFloat();
|
||||
default: break;
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return r;}
|
||||
case PIVariant::Char: {char r; ba >> r; return r;}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return r;}
|
||||
case PIVariant::Short: {short r; ba >> r; return r;}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return r;}
|
||||
case PIVariant::Int: {int r; ba >> r; return r;}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return r;}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return r;}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return r;}
|
||||
case PIVariant::Float: {float r; ba >> r; return r;}
|
||||
case PIVariant::Double: {double r; ba >> r; return r;}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return r;}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return r.real();}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return r.real();}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r.toFloat();}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return 0.f; return r.front().toFloat();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<float>(*this);
|
||||
}
|
||||
return 0.f;
|
||||
}
|
||||
@@ -300,26 +276,26 @@ float PIVariant::toFloat() const {
|
||||
* otherwise returns \a PIString::toDouble() of first string. \n
|
||||
* In case of other types returns \b 0.. */
|
||||
double PIVariant::toDouble() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong;
|
||||
case PIVariant::Float: return _vfloat;
|
||||
case PIVariant::Double: return _vdouble;
|
||||
case PIVariant::LDouble: return _vldouble;
|
||||
case PIVariant::Complexd: return _vcomplexd.real();
|
||||
case PIVariant::Complexld: return _vcomplexld.real();
|
||||
case PIVariant::String: return _vstring.toDouble();
|
||||
case PIVariant::StringList: if (_vstringlist.isEmpty()) return 0.; return _vstringlist.front().toDouble();
|
||||
default: break;
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return r;}
|
||||
case PIVariant::Char: {char r; ba >> r; return r;}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return r;}
|
||||
case PIVariant::Short: {short r; ba >> r; return r;}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return r;}
|
||||
case PIVariant::Int: {int r; ba >> r; return r;}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return r;}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return r;}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return r;}
|
||||
case PIVariant::Float: {float r; ba >> r; return r;}
|
||||
case PIVariant::Double: {double r; ba >> r; return r;}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return r;}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return r.real();}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return r.real();}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r.toDouble();}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return 0.; return r.front().toDouble();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<double>(*this);
|
||||
}
|
||||
return 0.;
|
||||
}
|
||||
@@ -332,26 +308,26 @@ double PIVariant::toDouble() const {
|
||||
* otherwise returns \a PIString::toLDouble() of first string. \n
|
||||
* In case of other types returns \b 0.. */
|
||||
ldouble PIVariant::toLDouble() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong;
|
||||
case PIVariant::Float: return _vfloat;
|
||||
case PIVariant::Double: return _vdouble;
|
||||
case PIVariant::LDouble: return _vldouble;
|
||||
case PIVariant::Complexd: return _vcomplexd.real();
|
||||
case PIVariant::Complexld: return _vcomplexld.real();
|
||||
case PIVariant::String: return _vstring.toLDouble();
|
||||
case PIVariant::StringList: if (_vstringlist.isEmpty()) return 0.; return _vstringlist.front().toLDouble();
|
||||
default: break;
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return r;}
|
||||
case PIVariant::Char: {char r; ba >> r; return r;}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return r;}
|
||||
case PIVariant::Short: {short r; ba >> r; return r;}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return r;}
|
||||
case PIVariant::Int: {int r; ba >> r; return r;}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return r;}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return r;}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return r;}
|
||||
case PIVariant::Float: {float r; ba >> r; return r;}
|
||||
case PIVariant::Double: {double r; ba >> r; return r;}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return r;}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return r.real();}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return r.real();}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r.toLDouble();}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return 0.; return r.front().toLDouble();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<float>(*this);
|
||||
}
|
||||
return 0.;
|
||||
}
|
||||
@@ -364,26 +340,26 @@ ldouble PIVariant::toLDouble() const {
|
||||
* otherwise returns \a PIString::toDouble() of first string. \n
|
||||
* In case of other types returns \b 0.. */
|
||||
complexd PIVariant::toComplexd() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong;
|
||||
case PIVariant::Float: return _vfloat;
|
||||
case PIVariant::Double: return _vdouble;
|
||||
case PIVariant::LDouble: return _vldouble;
|
||||
case PIVariant::Complexd: return _vcomplexd.real();
|
||||
case PIVariant::Complexld: return _vcomplexld.real();
|
||||
case PIVariant::String: return _vstring.toDouble();
|
||||
case PIVariant::StringList: if (_vstringlist.isEmpty()) return complexd_0; return _vstringlist.front().toDouble();
|
||||
default: break;
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return r;}
|
||||
case PIVariant::Char: {char r; ba >> r; return r;}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return r;}
|
||||
case PIVariant::Short: {short r; ba >> r; return r;}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return r;}
|
||||
case PIVariant::Int: {int r; ba >> r; return r;}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return r;}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return r;}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return r;}
|
||||
case PIVariant::Float: {float r; ba >> r; return r;}
|
||||
case PIVariant::Double: {double r; ba >> r; return r;}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return r;}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return r.real();}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return r.real();}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r.toDouble();}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return complexd_0; return r.front().toDouble();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<complexd>(*this);
|
||||
}
|
||||
return complexd_0;
|
||||
}
|
||||
@@ -396,26 +372,26 @@ complexd PIVariant::toComplexd() const {
|
||||
* otherwise returns \a PIString::toLDouble() of first string. \n
|
||||
* In case of other types returns \b 0.. */
|
||||
complexld PIVariant::toComplexld() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool:
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return _vint;
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return _vllong;
|
||||
case PIVariant::Float: return _vfloat;
|
||||
case PIVariant::Double: return _vdouble;
|
||||
case PIVariant::LDouble: return _vldouble;
|
||||
case PIVariant::Complexd: return _vcomplexd.real();
|
||||
case PIVariant::Complexld: return _vcomplexld.real();
|
||||
case PIVariant::String: return _vstring.toLDouble();
|
||||
case PIVariant::StringList: if (_vstringlist.isEmpty()) return complexld_0; return _vstringlist.front().toLDouble();
|
||||
default: break;
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return r;}
|
||||
case PIVariant::Char: {char r; ba >> r; return r;}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return r;}
|
||||
case PIVariant::Short: {short r; ba >> r; return r;}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return r;}
|
||||
case PIVariant::Int: {int r; ba >> r; return r;}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return r;}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return r;}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return r;}
|
||||
case PIVariant::Float: {float r; ba >> r; return r;}
|
||||
case PIVariant::Double: {double r; ba >> r; return r;}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return r;}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return r.real();}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return r.real();}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r.toLDouble();}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return complexld_0; return r.front().toLDouble();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<complexld>(*this);
|
||||
}
|
||||
return complexld_0;
|
||||
}
|
||||
@@ -426,8 +402,10 @@ complexld PIVariant::toComplexld() const {
|
||||
* In case of DateTime type returns time part of value. \n
|
||||
* In case of other types returns \a PITime(). */
|
||||
PITime PIVariant::toTime() const {
|
||||
if (type_ == PIVariant::Time) return _vtime;
|
||||
if (type_ == PIVariant::DateTime) return _vtime;
|
||||
PIByteArray ba(_content);
|
||||
if (_type == PIVariant::Time) {PITime r; ba >> r; return r;}
|
||||
if (_type == PIVariant::DateTime) {PIDateTime r; ba >> r; return r.time();}
|
||||
if (_type == PIVariant::Custom) {return getAsValue<PITime>(*this);}
|
||||
return PITime();
|
||||
}
|
||||
|
||||
@@ -437,8 +415,10 @@ PITime PIVariant::toTime() const {
|
||||
* In case of DateTime type returns date part of value. \n
|
||||
* In case of other types returns \a PIDate(). */
|
||||
PIDate PIVariant::toDate() const {
|
||||
if (type_ == PIVariant::Date) return _vdate;
|
||||
if (type_ == PIVariant::DateTime) return *((PIDate*)(&(_vdatetime.day)));
|
||||
PIByteArray ba(_content);
|
||||
if (_type == PIVariant::Date) {PIDate r; ba >> r; return r;}
|
||||
if (_type == PIVariant::DateTime) {PIDateTime r; ba >> r; return r.date();}
|
||||
if (_type == PIVariant::Custom) {return getAsValue<PIDate>(*this);}
|
||||
return PIDate();
|
||||
}
|
||||
|
||||
@@ -449,9 +429,11 @@ PIDate PIVariant::toDate() const {
|
||||
* In case of DateTime type returns date and time. \n
|
||||
* In case of other types returns \a PIDateTime(). */
|
||||
PIDateTime PIVariant::toDateTime() const {
|
||||
if (type_ == PIVariant::DateTime) return _vdatetime;
|
||||
if (type_ == PIVariant::Time) return PIDateTime(_vtime);
|
||||
if (type_ == PIVariant::Date) return PIDateTime(_vdate);
|
||||
PIByteArray ba(_content);
|
||||
if (_type == PIVariant::Time) {PITime r; ba >> r; return PIDateTime(r);}
|
||||
if (_type == PIVariant::Date) {PIDate r; ba >> r; return PIDateTime(r);}
|
||||
if (_type == PIVariant::DateTime) {PIDateTime r; ba >> r; return r;}
|
||||
if (_type == PIVariant::Custom) {return getAsValue<PIDateTime>(*this);}
|
||||
return PIDateTime();
|
||||
}
|
||||
|
||||
@@ -461,7 +443,9 @@ PIDateTime PIVariant::toDateTime() const {
|
||||
* In case of other types returns \a PISystemTime::fromSeconds() from
|
||||
* double value of variant content. */
|
||||
PISystemTime PIVariant::toSystemTime() const {
|
||||
if (type_ == PIVariant::SystemTime) return _vsystime;
|
||||
PIByteArray ba(_content);
|
||||
if (_type == PIVariant::SystemTime) {PISystemTime r; ba >> r; return r;}
|
||||
if (_type == PIVariant::Custom) {return getAsValue<PISystemTime>(*this);}
|
||||
return PISystemTime::fromSeconds(toDouble());
|
||||
}
|
||||
|
||||
@@ -476,34 +460,28 @@ PISystemTime PIVariant::toSystemTime() const {
|
||||
* ("(PISystemTime::seconds s, PISystemTime::nanoseconds ns)"). \n
|
||||
* In case of other types returns \b "". */
|
||||
PIString PIVariant::toString() const {
|
||||
switch (type_) {
|
||||
case PIVariant::Bool: return _vint == 0 ? "false" : "true";
|
||||
case PIVariant::Char:
|
||||
case PIVariant::UChar:
|
||||
case PIVariant::Short:
|
||||
case PIVariant::UShort:
|
||||
case PIVariant::Int:
|
||||
case PIVariant::UInt:
|
||||
case PIVariant::Long:
|
||||
case PIVariant::ULong: return PIString::fromNumber(_vint);
|
||||
case PIVariant::LLong:
|
||||
case PIVariant::ULLong: return PIString::fromNumber(_vllong);
|
||||
case PIVariant::Float: return PIString::fromNumber(_vfloat);
|
||||
case PIVariant::Double: return PIString::fromNumber(_vdouble);
|
||||
case PIVariant::LDouble: return PIString::fromNumber(_vldouble);
|
||||
case PIVariant::Complexd: return "(" + PIString::fromNumber(_vcomplexd.real()) + "; " + PIString::fromNumber(_vcomplexd.imag()) + ")";
|
||||
case PIVariant::Complexld: return "(" + PIString::fromNumber(_vcomplexld.real()) + "; " + PIString::fromNumber(_vcomplexld.imag()) + ")";
|
||||
case PIVariant::BitArray: return PIString::fromNumber(_vbitarray.bitSize()) + " bits";
|
||||
case PIVariant::ByteArray: return _vbytearray.toString();
|
||||
case PIVariant::String: return _vstring;
|
||||
case PIVariant::StringList: return "(" + _vstringlist.join("; ") + ")";
|
||||
case PIVariant::Time: return _vtime.toString();
|
||||
case PIVariant::Date: return _vdate.toString();
|
||||
case PIVariant::DateTime: return _vdatetime.toString();
|
||||
case PIVariant::SystemTime: return "(" + PIString::fromNumber(_vsystime.seconds) + " s, " + PIString::fromNumber(_vsystime.nanoseconds) + " ns)";
|
||||
default: break;
|
||||
PIByteArray ba(_content);
|
||||
switch (_type) {
|
||||
case PIVariant::Bool: {bool r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::Char: {char r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::UChar: {uchar r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::Short: {short r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::UShort: {ushort r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::Int: {int r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::UInt: {uint r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::LLong: {llong r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::ULLong: {ullong r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::Float: {float r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::Double: {double r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::LDouble: {ldouble r; ba >> r; return PIString::fromNumber(r);}
|
||||
case PIVariant::Complexd: {complexd r; ba >> r; return PIString::fromNumber(r.real());}
|
||||
case PIVariant::Complexld: {complexld r; ba >> r; return PIString::fromNumber(r.real());}
|
||||
case PIVariant::String: {PIString r; ba >> r; return r;}
|
||||
case PIVariant::StringList: {PIStringList r; ba >> r; if (r.isEmpty()) return PIString(); return r.front();}
|
||||
case PIVariant::Custom:
|
||||
return getAsValue<PIString>(*this);
|
||||
}
|
||||
return "";
|
||||
return PIString();
|
||||
}
|
||||
|
||||
|
||||
@@ -511,7 +489,9 @@ PIString PIVariant::toString() const {
|
||||
* \details In case of StringList type returns strings list value. \n
|
||||
* In case of other types returns \a PIStringList with one string value of variant content. */
|
||||
PIStringList PIVariant::toStringList() const {
|
||||
if (type_ == PIVariant::StringList) return _vstringlist;
|
||||
PIByteArray ba(_content);
|
||||
if (_type == PIVariant::StringList) {PIStringList r; ba >> r; return r;}
|
||||
if (_type == PIVariant::Custom) {return getAsValue<PIStringList>(*this);}
|
||||
return PIStringList(toString());
|
||||
}
|
||||
|
||||
@@ -520,7 +500,9 @@ PIStringList PIVariant::toStringList() const {
|
||||
* \details In case of BitArray type returns bit array value. \n
|
||||
* In case of other types returns \a PIBitArray from \a toLLong() value. */
|
||||
PIBitArray PIVariant::toBitArray() const {
|
||||
if (type_ == PIVariant::BitArray) return _vbitarray;
|
||||
PIByteArray ba(_content);
|
||||
if (_type == PIVariant::BitArray) {PIBitArray r; ba >> r; return r;}
|
||||
if (_type == PIVariant::Custom) {return getAsValue<PIBitArray>(*this);}
|
||||
return PIBitArray(ullong(toLLong()));
|
||||
}
|
||||
|
||||
@@ -529,6 +511,8 @@ PIBitArray PIVariant::toBitArray() const {
|
||||
* \details In case of ByteArray type returns byte array value. \n
|
||||
* In case of other types returns empty \a PIByteArray. */
|
||||
PIByteArray PIVariant::toByteArray() const {
|
||||
if (type_ == PIVariant::ByteArray) return _vbytearray;
|
||||
PIByteArray ba(_content);
|
||||
if (_type == PIVariant::ByteArray) {PIByteArray r; ba >> r; return r;}
|
||||
if (_type == PIVariant::Custom) {return getAsValue<PIByteArray>(*this);}
|
||||
return PIByteArray();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user