From 2e507c98deb4f10492b9e5ecf9e98ee54bf51509 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Tue, 30 Jul 2013 11:55:18 -0700 Subject: [PATCH] Add memory backend --- .../node/ripple_MemoryBackendFactory.cpp | 101 ++++++++++++++++++ .../node/ripple_MemoryBackendFactory.h | 30 ++++++ modules/ripple_app/ripple_app.cpp | 2 + 3 files changed, 133 insertions(+) create mode 100644 modules/ripple_app/node/ripple_MemoryBackendFactory.cpp create mode 100644 modules/ripple_app/node/ripple_MemoryBackendFactory.h diff --git a/modules/ripple_app/node/ripple_MemoryBackendFactory.cpp b/modules/ripple_app/node/ripple_MemoryBackendFactory.cpp new file mode 100644 index 0000000000..d0536b3505 --- /dev/null +++ b/modules/ripple_app/node/ripple_MemoryBackendFactory.cpp @@ -0,0 +1,101 @@ +//------------------------------------------------------------------------------ +/* + Copyright (c) 2011-2013, OpenCoin, Inc. +*/ +//============================================================================== + +class MemoryBackendFactory::Backend : public NodeStore::Backend +{ +private: + typedef std::map 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 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); +} + +//------------------------------------------------------------------------------ + diff --git a/modules/ripple_app/node/ripple_MemoryBackendFactory.h b/modules/ripple_app/node/ripple_MemoryBackendFactory.h new file mode 100644 index 0000000000..5bb4cf2700 --- /dev/null +++ b/modules/ripple_app/node/ripple_MemoryBackendFactory.h @@ -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 diff --git a/modules/ripple_app/ripple_app.cpp b/modules/ripple_app/ripple_app.cpp index 4660d7caa7..b263b583dc 100644 --- a/modules/ripple_app/ripple_app.cpp +++ b/modules/ripple_app/ripple_app.cpp @@ -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"