mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-17 10:55:32 +08:00
refs #247 Removed hashing based on address, which is very wrong.
This commit is contained in:
@@ -66,89 +66,78 @@ namespace BlackMisc
|
|||||||
uint CVariant::getValueHash() const
|
uint CVariant::getValueHash() const
|
||||||
{
|
{
|
||||||
uint h = 0;
|
uint h = 0;
|
||||||
if (!this->isValid() || this->isNull())
|
QVariant qv = this->toQVariant();
|
||||||
|
switch (qv.type())
|
||||||
{
|
{
|
||||||
QString hs;
|
case QVariant::Int:
|
||||||
hs.sprintf("%p", this);
|
h = ::qHash(qv.toInt());
|
||||||
h = ::qHash(hs);
|
break;
|
||||||
}
|
case QVariant::UInt:
|
||||||
else
|
h = ::qHash(qv.toUInt());
|
||||||
{
|
break;
|
||||||
QVariant qv = this->toQVariant();
|
case QVariant::Bool:
|
||||||
switch (qv.type())
|
h = ::qHash(qv.toUInt());
|
||||||
|
break;
|
||||||
|
case QVariant::Double:
|
||||||
|
h = ::qHash(qv.toUInt());
|
||||||
|
break;
|
||||||
|
case QVariant::LongLong:
|
||||||
|
h = ::qHash(qv.toLongLong());
|
||||||
|
break;
|
||||||
|
case QVariant::ULongLong:
|
||||||
|
h = ::qHash(qv.toULongLong());
|
||||||
|
break;
|
||||||
|
case QVariant::String:
|
||||||
|
h = ::qHash(qv.toString());
|
||||||
|
break;
|
||||||
|
case QVariant::Char:
|
||||||
|
h = ::qHash(qv.toChar());
|
||||||
|
break;
|
||||||
|
case QVariant::StringList:
|
||||||
|
h = ::qHash(qv.toString());
|
||||||
|
break;
|
||||||
|
case QVariant::ByteArray:
|
||||||
|
h = ::qHash(qv.toByteArray());
|
||||||
|
break;
|
||||||
|
case QVariant::Date:
|
||||||
|
case QVariant::Time:
|
||||||
|
case QVariant::DateTime:
|
||||||
|
case QVariant::Url:
|
||||||
|
case QVariant::Locale:
|
||||||
|
case QVariant::RegExp:
|
||||||
|
h = ::qHash(qv.toString());
|
||||||
|
break;
|
||||||
|
case QVariant::Map:
|
||||||
|
case QVariant::List:
|
||||||
|
case QVariant::BitArray:
|
||||||
|
case QVariant::Size:
|
||||||
|
case QVariant::SizeF:
|
||||||
|
case QVariant::Rect:
|
||||||
|
case QVariant::LineF:
|
||||||
|
case QVariant::Line:
|
||||||
|
case QVariant::RectF:
|
||||||
|
case QVariant::Point:
|
||||||
|
case QVariant::PointF:
|
||||||
|
case QVariant::UserType:
|
||||||
|
case QVariant::Invalid:
|
||||||
|
h = 2; // known, but not supported
|
||||||
|
break;
|
||||||
|
default:
|
||||||
{
|
{
|
||||||
case QVariant::Int:
|
// value object?
|
||||||
h = ::qHash(qv.toInt());
|
const QVariant qv = this->toQVariant();
|
||||||
break;
|
const CValueObject *cv = CValueObject::fromQVariant(qv);
|
||||||
case QVariant::UInt:
|
if (cv)
|
||||||
h = ::qHash(qv.toUInt());
|
|
||||||
break;
|
|
||||||
case QVariant::Bool:
|
|
||||||
h = ::qHash(qv.toUInt());
|
|
||||||
break;
|
|
||||||
case QVariant::Double:
|
|
||||||
h = ::qHash(qv.toUInt());
|
|
||||||
break;
|
|
||||||
case QVariant::LongLong:
|
|
||||||
h = ::qHash(qv.toLongLong());
|
|
||||||
break;
|
|
||||||
case QVariant::ULongLong:
|
|
||||||
h = ::qHash(qv.toULongLong());
|
|
||||||
break;
|
|
||||||
case QVariant::String:
|
|
||||||
h = ::qHash(qv.toString());
|
|
||||||
break;
|
|
||||||
case QVariant::Char:
|
|
||||||
h = ::qHash(qv.toChar());
|
|
||||||
break;
|
|
||||||
case QVariant::StringList:
|
|
||||||
h = ::qHash(qv.toString());
|
|
||||||
break;
|
|
||||||
case QVariant::ByteArray:
|
|
||||||
h = ::qHash(qv.toByteArray());
|
|
||||||
break;
|
|
||||||
case QVariant::Date:
|
|
||||||
case QVariant::Time:
|
|
||||||
case QVariant::DateTime:
|
|
||||||
case QVariant::Url:
|
|
||||||
case QVariant::Locale:
|
|
||||||
case QVariant::RegExp:
|
|
||||||
h = ::qHash(qv.toString());
|
|
||||||
break;
|
|
||||||
case QVariant::Map:
|
|
||||||
case QVariant::List:
|
|
||||||
case QVariant::BitArray:
|
|
||||||
case QVariant::Size:
|
|
||||||
case QVariant::SizeF:
|
|
||||||
case QVariant::Rect:
|
|
||||||
case QVariant::LineF:
|
|
||||||
case QVariant::Line:
|
|
||||||
case QVariant::RectF:
|
|
||||||
case QVariant::Point:
|
|
||||||
case QVariant::PointF:
|
|
||||||
case QVariant::UserType:
|
|
||||||
case QVariant::Invalid:
|
|
||||||
h = 2; // known, but not supported
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
{
|
||||||
// value object?
|
h = cv->getValueHash();
|
||||||
const QVariant qv = this->toQVariant();
|
}
|
||||||
const CValueObject *cv = CValueObject::fromQVariant(qv);
|
else
|
||||||
if (cv)
|
{
|
||||||
{
|
// no value object
|
||||||
h = cv->getValueHash();
|
Q_ASSERT(false);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// no value object
|
|
||||||
QString hs;
|
|
||||||
hs.sprintf("%p", this);
|
|
||||||
h = ::qHash(hs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user