// Copyright (c) 2014-2017 The Dash Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "governance-votedb.h" CGovernanceObjectVoteFile::CGovernanceObjectVoteFile() : nMemoryVotes(0), listVotes(), mapVoteIndex() {} CGovernanceObjectVoteFile::CGovernanceObjectVoteFile(const CGovernanceObjectVoteFile& other) : nMemoryVotes(other.nMemoryVotes), listVotes(other.listVotes), mapVoteIndex() { RebuildIndex(); } void CGovernanceObjectVoteFile::AddVote(const CGovernanceVote& vote) { listVotes.push_front(vote); mapVoteIndex[vote.GetHash()] = listVotes.begin(); ++nMemoryVotes; } bool CGovernanceObjectVoteFile::HasVote(const uint256& nHash) const { vote_m_cit it = mapVoteIndex.find(nHash); if(it == mapVoteIndex.end()) { return false; } return true; } bool CGovernanceObjectVoteFile::GetVote(const uint256& nHash, CGovernanceVote& vote) const { vote_m_cit it = mapVoteIndex.find(nHash); if(it == mapVoteIndex.end()) { return false; } vote = *(it->second); return true; } std::vector CGovernanceObjectVoteFile::GetVotes() const { std::vector vecResult; for(vote_l_cit it = listVotes.begin(); it != listVotes.end(); ++it) { vecResult.push_back(*it); } return vecResult; } void CGovernanceObjectVoteFile::RemoveVotesFromMasternode(const COutPoint& outpointMasternode) { vote_l_it it = listVotes.begin(); while(it != listVotes.end()) { if(it->GetMasternodeOutpoint() == outpointMasternode) { --nMemoryVotes; mapVoteIndex.erase(it->GetHash()); listVotes.erase(it++); } else { ++it; } } } CGovernanceObjectVoteFile& CGovernanceObjectVoteFile::operator=(const CGovernanceObjectVoteFile& other) { nMemoryVotes = other.nMemoryVotes; listVotes = other.listVotes; RebuildIndex(); return *this; } void CGovernanceObjectVoteFile::RebuildIndex() { mapVoteIndex.clear(); nMemoryVotes = 0; vote_l_it it = listVotes.begin(); while(it != listVotes.end()) { CGovernanceVote& vote = *it; uint256 nHash = vote.GetHash(); if(mapVoteIndex.find(nHash) == mapVoteIndex.end()) { mapVoteIndex[nHash] = it; ++nMemoryVotes; ++it; } else { listVotes.erase(it++); } } }