From 80e19e0ad7f4a4564f97db94f25d843c44fc4954 Mon Sep 17 00:00:00 2001 From: Mekagoza Date: Tue, 11 Dec 2018 18:33:37 -0600 Subject: [PATCH] Encapsulate accounts of solana::bank::Accounts Make the field private and expose an account_values() method that returns the values iterator from the internal hashmap --- src/bank.rs | 7 ++++++- src/compute_leader_finality_service.rs | 3 +-- src/leader_scheduler.rs | 3 +-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/bank.rs b/src/bank.rs index 171c42b946..853c0e1c4c 100644 --- a/src/bank.rs +++ b/src/bank.rs @@ -197,7 +197,7 @@ pub struct Accounts { // TODO: implement values() or something? take this back to private // from the voting/leader/finality code // issue #1701 - pub accounts: HashMap, + accounts: HashMap, /// The number of transactions the bank has processed without error since the /// start of the ledger. @@ -208,6 +208,11 @@ pub struct Accounts { } impl Accounts { + /// Returns a read-only iterator over all known accounts + pub fn account_values(&self) -> std::collections::hash_map::Values { + self.accounts.values() + } + fn load(&self, pubkey: &Pubkey) -> Option<&Account> { if let Some(account) = self.accounts.get(pubkey) { return Some(account); diff --git a/src/compute_leader_finality_service.rs b/src/compute_leader_finality_service.rs index a0719980b6..36f64197af 100644 --- a/src/compute_leader_finality_service.rs +++ b/src/compute_leader_finality_service.rs @@ -43,8 +43,7 @@ impl ComputeLeaderFinalityService { // process_transaction(), case VoteInstruction::RegisterAccount), this will be more accurate. // See github issue 1654. bank_accounts - .accounts - .values() + .account_values() .filter_map(|account| { // Filter out any accounts that don't belong to the VoteProgram // by returning None diff --git a/src/leader_scheduler.rs b/src/leader_scheduler.rs index 16a52b49b8..39cf8f9300 100644 --- a/src/leader_scheduler.rs +++ b/src/leader_scheduler.rs @@ -322,8 +322,7 @@ impl LeaderScheduler { // TODO: iterate through checkpoints, too accounts - .accounts - .values() + .account_values() .filter_map(|account| { if vote_program::check_id(&account.owner) { if let Ok(vote_state) = VoteProgram::deserialize(&account.userdata) {