Initial commit of BlockchainDB tests, other misc

miscellaneous changes to BlockchainDB/blockchain as well, namely
replacing instances of std::list with std::vector
This commit is contained in:
Thomas Winget 2014-10-15 18:33:53 -04:00 committed by warptangent
parent 90d6f8bf62
commit bc44bc19f4
3 changed files with 315 additions and 6 deletions

View file

@ -547,11 +547,16 @@ bool Blockchain::get_block_by_hash(const crypto::hash &h, block &blk)
return false;
}
//------------------------------------------------------------------
//FIXME: this function does not seem to be called from anywhere, but
// if it ever is, should probably change std::list for std::vector
void Blockchain::get_all_known_block_ids(std::list<crypto::hash> &main, std::list<crypto::hash> &alt, std::list<crypto::hash> &invalid)
{
CRITICAL_REGION_LOCAL(m_blockchain_lock);
main = m_db->get_hashes_range(0, m_db->height());
for (auto& a : m_db->get_hashes_range(0, m_db->height()))
{
main.push_back(a);
}
BOOST_FOREACH(blocks_ext_by_hash::value_type &v, m_alternative_chains)
alt.push_back(v.first);

View file

@ -25,6 +25,8 @@
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef BLOCKCHAIN_DB_H
#define BLOCKCHAIN_DB_H
#include <list>
#include <string>
@ -70,6 +72,8 @@
* bool lock()
* unlock()
*
* vector<str> get_filenames()
*
* Blocks:
* bool block_exists(hash)
* height add_block(block, block_size, cumulative_difficulty, coins_generated, transactions)
@ -364,6 +368,11 @@ private:
public:
// virtual dtor
virtual ~BlockchainDB() { };
// open the db at location <filename>, or create it if there isn't one.
virtual void open(const std::string& filename) = 0;
@ -379,6 +388,9 @@ public:
// reset the db -- USE WITH CARE
virtual void reset() = 0;
// get all files used by this db (if any)
virtual std::vector<std::string> get_filenames() = 0;
// FIXME: these are just for functionality mocking, need to implement
// RAII-friendly and multi-read one-write friendly locking mechanism
@ -435,11 +447,11 @@ public:
// return hash of block at height <height>
virtual crypto::hash get_block_hash_from_height(const uint64_t& height) = 0;
// return list of blocks in range <h1,h2> of height.
virtual std::list<block> get_blocks_range(const uint64_t& h1, const uint64_t& h2) = 0;
// return vector of blocks in range <h1,h2> of height (inclusively)
virtual std::vector<block> get_blocks_range(const uint64_t& h1, const uint64_t& h2) = 0;
// return list of block hashes in range <h1, h2> of height
virtual std::list<crypto::hash> get_hashes_range(const uint64_t& h1, const uint64_t& h2) = 0;
// return vector of block hashes in range <h1, h2> of height (inclusively)
virtual std::vector<crypto::hash> get_hashes_range(const uint64_t& h1, const uint64_t& h2) = 0;
// return the hash of the top block on the chain
virtual crypto::hash top_block_hash() = 0;
@ -479,7 +491,7 @@ public:
// return list of tx with hashes <hlist>.
// TODO: decide if a missing hash means return empty list
// or just skip that hash
virtual std::list<transaction> get_tx_list(const std::vector<crypto::hash>& hlist) = 0;
virtual std::vector<transaction> get_tx_list(const std::vector<crypto::hash>& hlist) = 0;
// returns height of block that contains transaction with hash <h>
virtual uint64_t get_tx_block_height(const crypto::hash& h) = 0;
@ -511,3 +523,5 @@ public:
} // namespace cryptonote
#endif // BLOCKCHAIN_DB_H