aboutsummaryrefslogtreecommitdiff
path: root/src/main.h
diff options
context:
space:
mode:
authorMike Hearn <hearn@google.com>2013-05-07 13:59:29 +0200
committerMike Hearn <hearn@google.com>2013-06-19 15:39:45 +0200
commit70e7fba06da36218688a4cae4a5d12332c714247 (patch)
treefe11b5b63d2ff11d9c0d2eab54ee4e806c70caab /src/main.h
parent25dbb928600b2c65bc20ce026c5f9cf1fb457d60 (diff)
Move implementation of some CBlockLocator methods
Move out of main.h to improve compile times and add documentation for what the methods do.
Diffstat (limited to 'src/main.h')
-rw-r--r--src/main.h99
1 files changed, 12 insertions, 87 deletions
diff --git a/src/main.h b/src/main.h
index 87f1dbfa8f..615a3b3ec4 100644
--- a/src/main.h
+++ b/src/main.h
@@ -1202,22 +1202,14 @@ class CBlockLocator
protected:
std::vector<uint256> vHave;
public:
-
- CBlockLocator()
- {
- }
+ CBlockLocator() {}
explicit CBlockLocator(const CBlockIndex* pindex)
{
Set(pindex);
}
- explicit CBlockLocator(uint256 hashBlock)
- {
- std::map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock);
- if (mi != mapBlockIndex.end())
- Set((*mi).second);
- }
+ explicit CBlockLocator(uint256 hashBlock);
CBlockLocator(const std::vector<uint256>& vHaveIn)
{
@@ -1241,83 +1233,16 @@ public:
return vHave.empty();
}
- void Set(const CBlockIndex* pindex)
- {
- vHave.clear();
- int nStep = 1;
- while (pindex)
- {
- vHave.push_back(pindex->GetBlockHash());
-
- // Exponentially larger steps back
- for (int i = 0; pindex && i < nStep; i++)
- pindex = pindex->pprev;
- if (vHave.size() > 10)
- nStep *= 2;
- }
- vHave.push_back(hashGenesisBlock);
- }
-
- int GetDistanceBack()
- {
- // Retrace how far back it was in the sender's branch
- int nDistance = 0;
- int nStep = 1;
- BOOST_FOREACH(const uint256& hash, vHave)
- {
- std::map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash);
- if (mi != mapBlockIndex.end())
- {
- CBlockIndex* pindex = (*mi).second;
- if (pindex->IsInMainChain())
- return nDistance;
- }
- nDistance += nStep;
- if (nDistance > 10)
- nStep *= 2;
- }
- return nDistance;
- }
-
- CBlockIndex* GetBlockIndex()
- {
- // Find the first block the caller has in the main chain
- BOOST_FOREACH(const uint256& hash, vHave)
- {
- std::map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash);
- if (mi != mapBlockIndex.end())
- {
- CBlockIndex* pindex = (*mi).second;
- if (pindex->IsInMainChain())
- return pindex;
- }
- }
- return pindexGenesisBlock;
- }
-
- uint256 GetBlockHash()
- {
- // Find the first block the caller has in the main chain
- BOOST_FOREACH(const uint256& hash, vHave)
- {
- std::map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hash);
- if (mi != mapBlockIndex.end())
- {
- CBlockIndex* pindex = (*mi).second;
- if (pindex->IsInMainChain())
- return hash;
- }
- }
- return hashGenesisBlock;
- }
-
- int GetHeight()
- {
- CBlockIndex* pindex = GetBlockIndex();
- if (!pindex)
- return 0;
- return pindex->nHeight;
- }
+ /** Given a block initialises the locator to that point in the chain. */
+ void Set(const CBlockIndex* pindex);
+ /** Returns the distance in blocks this locator is from our chain head. */
+ int GetDistanceBack();
+ /** Returns the first best-chain block the locator contains. */
+ CBlockIndex* GetBlockIndex();
+ /** Returns the hash of the first best chain block the locator contains. */
+ uint256 GetBlockHash();
+ /** Returns the height of the first best chain block the locator has. */
+ int GetHeight();
};