about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNguyễn Gia Phong <cnx@loang.net>2024-12-02 17:18:25 +0900
committerNguyễn Gia Phong <cnx@loang.net>2024-12-12 14:59:45 +0900
commit8ef1e68d59d24ab713ccf6d2524c12d07403fd08 (patch)
treeb7802cb0d83d3d449a27502662b96460147aeac6 /src
parentdb31db002483779671fe06a740bbbacf30ec09e7 (diff)
downloadafl++-8ef1e68d59d24ab713ccf6d2524c12d07403fd08.tar.gz
Unuse boost::hash_*
Diffstat (limited to 'src')
-rw-r--r--src/aflrun.cpp37
1 files changed, 23 insertions, 14 deletions
diff --git a/src/aflrun.cpp b/src/aflrun.cpp
index 54a1f203..60d8fab0 100644
--- a/src/aflrun.cpp
+++ b/src/aflrun.cpp
@@ -1,7 +1,6 @@
 #include "aflrun.h"
 
 #include <boost/dynamic_bitset.hpp>
-#include <boost/functional/hash.hpp>
 namespace bo = boost;
 
 #include <algorithm>
@@ -2663,37 +2662,47 @@ void FringeBlocks<F, D>::group()
 
 rh::unordered_set<reach_t> TargetGrouper::all_targets;
 
+template<typename T>
+inline void hash_combine(size_t& seed, const T& v)
+{
+	/// Behavior is practically identical to boost::hash_combine.
+	std::hash<T> hasher;
+	seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+}
+
 } // namespace
 
-size_t hash<Fringe>::operator()(const Fringe& p) const noexcept
+size_t std::hash<Fringe>::operator()(const Fringe& p) const noexcept
 {
 	size_t seed = 0;
-	bo::hash_combine(seed, p.block);
-	bo::hash_combine(seed, p.context);
+	hash_combine(seed, p.block);
+	hash_combine(seed, p.context);
 	return seed;
 }
 
-size_t hash<SeedFringes>::operator()(const SeedFringes& p) const noexcept
+size_t std::hash<SeedFringes>::operator()(const SeedFringes& p) const noexcept
 {
-	const u8* ptr = p.bitmap.get();
-	return bo::hash_range(ptr, ptr + p.bitmap_size);
+	const auto* const bitmap = p.bitmap.get();
+	size_t seed = 0;
+	for (size_t i = 0; i < p.bitmap_size; ++i)
+		hash_combine(seed, bitmap[i]);
+	return seed;
 }
 
-size_t hash<pair<reach_t, reach_t>>::operator()(
+size_t std::hash<pair<reach_t, reach_t>>::operator()(
 	const pair<reach_t, reach_t>& p) const noexcept
 {
 	size_t seed = 0;
-	bo::hash_combine(seed, p.first);
-	bo::hash_combine(seed, p.second);
+	hash_combine(seed, p.first);
+	hash_combine(seed, p.second);
 	return seed;
 }
 
-size_t hash<ClusterPair>::operator()(
-	const ClusterPair& p) const noexcept
+size_t std::hash<ClusterPair>::operator()(const ClusterPair& p) const noexcept
 {
 	size_t seed = 0;
-	bo::hash_combine(seed, p.get_fst());
-	bo::hash_combine(seed, p.get_snd());
+	hash_combine(seed, p.get_fst());
+	hash_combine(seed, p.get_snd());
 	return seed;
 }