From: <arn...@us...> - 2007-12-20 09:53:34
|
Revision: 108 http://adchpp.svn.sourceforge.net/adchpp/?rev=108&view=rev Author: arnetheduck Date: 2007-12-20 01:53:30 -0800 (Thu, 20 Dec 2007) Log Message: ----------- Bloom manager fixes, version display format Modified Paths: -------------- adchpp/trunk/adchpp/version.cpp adchpp/trunk/plugins/Bloom/src/BloomManager.cpp adchpp/trunk/plugins/Bloom/src/HashBloom.cpp Modified: adchpp/trunk/adchpp/version.cpp =================================================================== --- adchpp/trunk/adchpp/version.cpp 2007-12-19 09:35:58 UTC (rev 107) +++ adchpp/trunk/adchpp/version.cpp 2007-12-20 09:53:30 UTC (rev 108) @@ -9,8 +9,8 @@ #define strver(s) #s #define APPNAME "ADCH++" -#define VERSIONSTRING "2.0." xstrver(ADCHPP_REVISION) -#define VERSIONFLOAT 2.0 +#define VERSIONSTRING "2.1.0 (r" xstrver(ADCHPP_REVISION) ")" +#define VERSIONFLOAT 2.1 #ifndef NDEBUG #define BUILDSTRING "Debug" @@ -27,5 +27,5 @@ string appName = APPNAME; string versionString = FULLVERSIONSTRING; float versionFloat = VERSIONFLOAT; - + } Modified: adchpp/trunk/plugins/Bloom/src/BloomManager.cpp =================================================================== --- adchpp/trunk/plugins/Bloom/src/BloomManager.cpp 2007-12-19 09:35:58 UTC (rev 107) +++ adchpp/trunk/plugins/Bloom/src/BloomManager.cpp 2007-12-20 09:53:30 UTC (rev 108) @@ -57,7 +57,7 @@ size_t k = HashBloom::get_k(n); size_t m = HashBloom::get_m(n, k); - HashBloom bloom = blooms[c.getCID()]; + HashBloom& bloom = blooms[c.getCID()]; bloom.reset(k); @@ -95,7 +95,7 @@ HashBloom& bloom = blooms[c.getCID()]; for(size_t i = 0; i < len; ++i) { for(size_t j = 0; j < 8; ++j) { - bloom.push_back(data[i] & 1 << j); + bloom.push_back(data[i] & (1 << j)); } } } Modified: adchpp/trunk/plugins/Bloom/src/HashBloom.cpp =================================================================== --- adchpp/trunk/plugins/Bloom/src/HashBloom.cpp 2007-12-19 09:35:58 UTC (rev 107) +++ adchpp/trunk/plugins/Bloom/src/HashBloom.cpp 2007-12-20 09:53:30 UTC (rev 108) @@ -2,14 +2,10 @@ #include "HashBloom.h" size_t HashBloom::get_k(size_t n) { - const size_t bits = TTHValue::SIZE * 8; - for(size_t k = static_cast<size_t>(sqrt(bits)); k > 1; --k) { - // We only want the k's where the bits will end up on a byte boundary to ease hash implementation - if((bits % k) == 0 && (bits / k) % 8 == 0) { - uint64_t m = get_m(n, k); - if(m >> (TTHValue::SIZE * 8 / k) == 0) { - return k; - } + for(size_t k = TTHValue::SIZE/3; k > 1; --k) { + uint64_t m = get_m(n, k); + if(m >> 24 == 0) { + return k; } } return 1; @@ -29,13 +25,15 @@ bool HashBloom::match(const TTHValue& tth) const { if(bloom.empty()) { - return true; + return false; } for(size_t i = 0; i < k; ++i) { if(!bloom[pos(tth, i)]) { + printf("no match\n"); return false; } } + printf("match\n"); return true; } @@ -49,6 +47,12 @@ } size_t HashBloom::pos(const TTHValue& tth, size_t n) const { - return (*(size_t*)(tth.data + (TTHValue::SIZE / k) * n)) % bloom.size(); + uint32_t x = 0; + for(size_t i = n*3; i < TTHValue::SIZE; i += 3*k) { + x ^= static_cast<uint32_t>(tth.data[i]) << 2*8; + x ^= static_cast<uint32_t>(tth.data[i+1]) << 8; + x ^= static_cast<uint32_t>(tth.data[i+2]); + } + return x % bloom.size(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |