git-svn-id: svn://db.shs.com.ru/pip@843 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -461,7 +461,7 @@ uint letobe_i(uint v) {return (v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF
|
||||
#endif
|
||||
|
||||
/// \brief Generic hash function, impements murmur3/32 algorithm
|
||||
inline uint piHash(const uchar * data, uint len, uint seed = 0) {
|
||||
inline uint piHashData(const uchar * data, uint len, uint seed = 0) {
|
||||
if (!data || len <= 0) return 0u;
|
||||
uint h = seed;
|
||||
if (len > 3) {
|
||||
|
||||
@@ -278,7 +278,7 @@ uint PIByteArray::checksumPlain32() const {
|
||||
|
||||
|
||||
uint PIByteArray::hash() const {
|
||||
return piHash(data(), size_s());
|
||||
return piHashData(data(), size_s());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -315,4 +315,16 @@ __PIBYTEARRAY_SIMPLE_TYPE__(double)
|
||||
__PIBYTEARRAY_SIMPLE_TYPE__(ldouble)
|
||||
__PIBYTEARRAY_SIMPLE_TYPE__(PIChar)
|
||||
|
||||
|
||||
|
||||
template<typename T>
|
||||
inline uint piHash(const T & v) {
|
||||
PIByteArray ba;
|
||||
ba << v;
|
||||
return ba.hash();
|
||||
}
|
||||
|
||||
template<> inline uint piHash(const PIByteArray & ba) {return ba.hash();}
|
||||
|
||||
|
||||
#endif // PIBYTEARRAY_H
|
||||
|
||||
@@ -420,7 +420,7 @@ const char * PIString::dataAscii() const {
|
||||
|
||||
uint PIString::hash() const {
|
||||
buildData();
|
||||
return piHash(data_.data(), data_.size_s() - 1);
|
||||
return piHashData(data_.data(), data_.size_s() - 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -863,4 +863,6 @@ inline PIByteArray & operator >>(PIByteArray & s, PIStringList & v) {int sz; s >
|
||||
//! \relatesalso PIStringList \relatesalso PICout \brief Output operator to PICout
|
||||
inline PICout operator <<(PICout s, const PIStringList & v) {s.space(); s.setControl(0, true); s << "{"; for (uint i = 0; i < v.size(); ++i) {s << "\"" << v[i] << "\""; if (i < v.size() - 1) s << ", ";} s << "}"; s.restoreControl(); return s;}
|
||||
|
||||
template<> inline uint piHash(const PIString & s) {return s.hash();}
|
||||
|
||||
#endif // PISTRING_H
|
||||
|
||||
Reference in New Issue
Block a user