Add functions to allow pending_key objects to be in containers. (#4489)
This commit is contained in:
		
					parent
					
						
							
								7dbf64f11c
							
						
					
				
			
			
				commit
				
					
						7523172634
					
				
			
		
					 3 changed files with 32 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
#include <nano/lib/thread_pool.hpp>
 | 
			
		||||
#include <nano/lib/timer.hpp>
 | 
			
		||||
#include <nano/lib/utility.hpp>
 | 
			
		||||
#include <nano/secure/pending_info.hpp>
 | 
			
		||||
#include <nano/secure/utility.hpp>
 | 
			
		||||
 | 
			
		||||
#include <gtest/gtest.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -346,3 +347,16 @@ TEST (relaxed_atomic_integral, many_threads)
 | 
			
		|||
	// Check values
 | 
			
		||||
	ASSERT_EQ (0, atomic);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST (pending_key, sorting)
 | 
			
		||||
{
 | 
			
		||||
	nano::pending_key one{ 1, 2 };
 | 
			
		||||
	nano::pending_key two{ 1, 3 };
 | 
			
		||||
	nano::pending_key three{ 2, 1 };
 | 
			
		||||
	ASSERT_LT (one, two);
 | 
			
		||||
	ASSERT_LT (one, three);
 | 
			
		||||
	ASSERT_LT (two, three);
 | 
			
		||||
	nano::pending_key one_same{ 1, 2 };
 | 
			
		||||
	ASSERT_EQ (std::hash<nano::pending_key>{}(one), std::hash<nano::pending_key>{}(one_same));
 | 
			
		||||
	ASSERT_NE (std::hash<nano::pending_key>{}(one), std::hash<nano::pending_key>{}(two));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,3 +65,8 @@ nano::account const & nano::pending_key::key () const
 | 
			
		|||
{
 | 
			
		||||
	return account;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool nano::pending_key::operator< (nano::pending_key const & other_a) const
 | 
			
		||||
{
 | 
			
		||||
	return account == other_a.account ? hash < other_a.hash : account < other_a.account;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,8 +28,21 @@ public:
 | 
			
		|||
	pending_key (nano::account const &, nano::block_hash const &);
 | 
			
		||||
	bool deserialize (nano::stream &);
 | 
			
		||||
	bool operator== (nano::pending_key const &) const;
 | 
			
		||||
	bool operator< (nano::pending_key const &) const;
 | 
			
		||||
	nano::account const & key () const;
 | 
			
		||||
	nano::account account{};
 | 
			
		||||
	nano::block_hash hash{ 0 };
 | 
			
		||||
};
 | 
			
		||||
} // namespace nano
 | 
			
		||||
 | 
			
		||||
namespace std
 | 
			
		||||
{
 | 
			
		||||
template <>
 | 
			
		||||
struct hash<::nano::pending_key>
 | 
			
		||||
{
 | 
			
		||||
	size_t operator() (::nano::pending_key const & data_a) const
 | 
			
		||||
	{
 | 
			
		||||
		return hash<::nano::uint512_union>{}({ ::nano::uint256_union{ data_a.account.number () }, data_a.hash });
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue