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