Use U32HasherState for HashSet
This commit is contained in:
		
							parent
							
								
									f94a9c7dcd
								
							
						
					
					
						commit
						d8eb10753f
					
				@ -1,4 +1,7 @@
 | 
			
		||||
use crate::thread_transaction::ThreadTransaction;
 | 
			
		||||
use crate::{
 | 
			
		||||
    thread_transaction::ThreadTransaction,
 | 
			
		||||
    u32_hasher_types::{u32hashset_new, U32HasherState},
 | 
			
		||||
};
 | 
			
		||||
use std::{
 | 
			
		||||
    cmp::Ordering,
 | 
			
		||||
    collections::HashSet,
 | 
			
		||||
@ -17,8 +20,8 @@ pub struct AuditTransaction {
 | 
			
		||||
    pub dependency_rate: f64,
 | 
			
		||||
    pub inputs: Vec<u32>,
 | 
			
		||||
    pub relatives_set_flag: bool,
 | 
			
		||||
    pub ancestors: HashSet<u32>,
 | 
			
		||||
    pub children: HashSet<u32>,
 | 
			
		||||
    pub ancestors: HashSet<u32, U32HasherState>,
 | 
			
		||||
    pub children: HashSet<u32, U32HasherState>,
 | 
			
		||||
    pub ancestor_fee: u64,
 | 
			
		||||
    pub ancestor_weight: u32,
 | 
			
		||||
    pub ancestor_sigops: u32,
 | 
			
		||||
@ -76,8 +79,8 @@ impl AuditTransaction {
 | 
			
		||||
            dependency_rate: f64::INFINITY,
 | 
			
		||||
            inputs: tx.inputs.clone(),
 | 
			
		||||
            relatives_set_flag: false,
 | 
			
		||||
            ancestors: HashSet::new(),
 | 
			
		||||
            children: HashSet::new(),
 | 
			
		||||
            ancestors: u32hashset_new(),
 | 
			
		||||
            children: u32hashset_new(),
 | 
			
		||||
            ancestor_fee: tx.fee,
 | 
			
		||||
            ancestor_weight: tx.weight,
 | 
			
		||||
            ancestor_sigops: tx.sigops,
 | 
			
		||||
@ -107,7 +110,7 @@ impl AuditTransaction {
 | 
			
		||||
    #[inline]
 | 
			
		||||
    pub fn set_ancestors(
 | 
			
		||||
        &mut self,
 | 
			
		||||
        ancestors: HashSet<u32>,
 | 
			
		||||
        ancestors: HashSet<u32, U32HasherState>,
 | 
			
		||||
        total_fee: u64,
 | 
			
		||||
        total_weight: u32,
 | 
			
		||||
        total_sigops: u32,
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,9 @@ use std::{
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
    audit_transaction::AuditTransaction,
 | 
			
		||||
    u32_hasher_types::{u32hashmap_with_capacity, u32priority_queue_with_capacity, U32HasherState},
 | 
			
		||||
    u32_hasher_types::{
 | 
			
		||||
        u32hashmap_with_capacity, u32hashset_new, u32priority_queue_with_capacity, U32HasherState,
 | 
			
		||||
    },
 | 
			
		||||
    GbtResult, ThreadTransactionsMap, STARTING_CAPACITY,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -217,7 +219,7 @@ pub fn gbt(mempool: &mut ThreadTransactionsMap) -> Option<GbtResult> {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn set_relatives(txid: u32, audit_pool: &mut AuditPool) {
 | 
			
		||||
    let mut parents: HashSet<u32> = HashSet::new();
 | 
			
		||||
    let mut parents: HashSet<u32, U32HasherState> = u32hashset_new();
 | 
			
		||||
    if let Some(tx) = audit_pool.get(&txid) {
 | 
			
		||||
        if tx.relatives_set_flag {
 | 
			
		||||
            return;
 | 
			
		||||
@ -229,7 +231,7 @@ fn set_relatives(txid: u32, audit_pool: &mut AuditPool) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let mut ancestors: HashSet<u32> = HashSet::new();
 | 
			
		||||
    let mut ancestors: HashSet<u32, U32HasherState> = u32hashset_new();
 | 
			
		||||
    for parent_id in &parents {
 | 
			
		||||
        set_relatives(*parent_id, audit_pool);
 | 
			
		||||
 | 
			
		||||
@ -268,7 +270,7 @@ fn update_descendants(
 | 
			
		||||
    modified: &mut ModifiedQueue,
 | 
			
		||||
    cluster_rate: f64,
 | 
			
		||||
) {
 | 
			
		||||
    let mut visited: HashSet<u32> = HashSet::new();
 | 
			
		||||
    let mut visited: HashSet<u32, U32HasherState> = u32hashset_new();
 | 
			
		||||
    let mut descendant_stack: Vec<u32> = Vec::new();
 | 
			
		||||
    let root_fee: u64;
 | 
			
		||||
    let root_weight: u32;
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use priority_queue::PriorityQueue;
 | 
			
		||||
use std::{
 | 
			
		||||
    collections::HashMap,
 | 
			
		||||
    collections::{HashMap, HashSet},
 | 
			
		||||
    hash::{BuildHasher, Hasher},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,13 @@ pub fn u32priority_queue_with_capacity<V: Ord>(
 | 
			
		||||
    PriorityQueue::with_capacity_and_hasher(capacity, U32HasherState(()))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// This is the only way to create a `HashSet` with the `U32HasherState`
 | 
			
		||||
pub fn u32hashset_new() -> HashSet<u32, U32HasherState> {
 | 
			
		||||
    HashSet::with_hasher(U32HasherState(()))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// A private unit type is contained so no one can make an instance of it.
 | 
			
		||||
#[derive(Clone)]
 | 
			
		||||
pub struct U32HasherState(());
 | 
			
		||||
 | 
			
		||||
impl BuildHasher for U32HasherState {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user