Add memory backend

This commit is contained in:
Vinnie Falco
2013-07-30 11:55:18 -07:00
parent 7936d3a3db
commit 2e507c98de
3 changed files with 133 additions and 0 deletions

View File

@@ -0,0 +1,101 @@
//------------------------------------------------------------------------------
/*
Copyright (c) 2011-2013, OpenCoin, Inc.
*/
//==============================================================================
class MemoryBackendFactory::Backend : public NodeStore::Backend
{
private:
typedef std::map <uint256 const, NodeObject::pointer> Map;
public:
Backend (size_t keyBytes, StringPairArray const& keyValues)
: m_keyBytes (keyBytes)
{
}
~Backend ()
{
}
std::string getDataBaseName ()
{
return "memory";
}
//--------------------------------------------------------------------------
NodeObject::pointer retrieve (uint256 const &hash)
{
Map::iterator iter = m_map.find (hash);
if (iter != m_map.end ())
return iter->second;
return NodeObject::pointer ();
}
bool store (NodeObject::ref object)
{
Map::iterator iter = m_map.find (object->getHash ());
if (iter == m_map.end ())
{
m_map.insert (std::make_pair (object->getHash (), object));
}
return true;
}
bool bulkStore (const std::vector< NodeObject::pointer >& batch)
{
for (int i = 0; i < batch.size (); ++i)
store (batch [i]);
return true;
}
void visitAll (FUNCTION_TYPE <void (NodeObject::pointer)> f)
{
for (Map::const_iterator iter = m_map.begin (); iter != m_map.end (); ++iter)
f (iter->second);
}
//--------------------------------------------------------------------------
private:
size_t const m_keyBytes;
Map m_map;
};
//------------------------------------------------------------------------------
MemoryBackendFactory::MemoryBackendFactory ()
{
}
MemoryBackendFactory::~MemoryBackendFactory ()
{
}
MemoryBackendFactory& MemoryBackendFactory::getInstance ()
{
static MemoryBackendFactory instance;
return instance;
}
String MemoryBackendFactory::getName () const
{
return "Memory";
}
NodeStore::Backend* MemoryBackendFactory::createInstance (StringPairArray const& keyValues)
{
return new MemoryBackendFactory::Backend (32, keyValues);
}
//------------------------------------------------------------------------------

View File

@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
/*
Copyright (c) 2011-2013, OpenCoin, Inc.
*/
//==============================================================================
#ifndef RIPPLE_MEMORYBACKENDFACTORY_H_INCLUDED
#define RIPPLE_MEMORYBACKENDFACTORY_H_INCLUDED
/** Factory to produce a RAM based backend for the NodeStore.
@see NodeStore
*/
class MemoryBackendFactory : public NodeStore::BackendFactory
{
private:
class Backend;
MemoryBackendFactory ();
~MemoryBackendFactory ();
public:
static MemoryBackendFactory& getInstance ();
String getName () const;
NodeStore::Backend* createInstance (StringPairArray const& keyValues);
};
#endif

View File

@@ -103,6 +103,7 @@ namespace ripple
#include "node/ripple_NodeObject.h"
#include "node/ripple_NodeStore.h"
#include "node/ripple_LevelDBBackendFactory.h"
#include "node/ripple_MemoryBackendFactory.h"
#include "node/ripple_HyperLevelDBBackendFactory.h"
#include "node/ripple_MdbBackendFactory.h"
#include "node/ripple_NullBackendFactory.h"
@@ -246,6 +247,7 @@ static const uint64 tenTo17m1 = tenTo17 - 1;
#include "node/ripple_NodeObject.cpp"
#include "node/ripple_NodeStore.cpp"
#include "node/ripple_LevelDBBackendFactory.cpp"
#include "node/ripple_MemoryBackendFactory.cpp"
#include "node/ripple_HyperLevelDBBackendFactory.cpp"
#include "node/ripple_MdbBackendFactory.cpp"
#include "node/ripple_NullBackendFactory.cpp"