29 #include <ibrcommon/Logger.h>
30 #include <ibrcommon/thread/MutexLock.h>
36 const std::string MemoryBundleStorage::TAG =
"MemoryBundleStorage";
64 ibrcommon::MutexLock l(_bundleslock);
65 _list.expire(time.getTimestamp());
71 return MemoryBundleStorage::TAG;
76 ibrcommon::MutexLock l(_bundleslock);
77 return _bundles.empty();
88 ibrcommon::MutexLock l(_bundleslock);
89 return _bundles.size();
94 size_t items_added = 0;
97 ibrcommon::MutexLock l(_bundleslock);
99 for (prio_bundle_set::const_iterator iter = _priority_index.begin(); (iter != _priority_index.end()) && ((cb.limit() == 0) || (items_added < cb.limit())); ++iter)
106 if ( cb.addIfSelected(result, bundle) ) items_added++;
115 ibrcommon::MutexLock l(_bundleslock);
117 for (bundle_list::const_iterator iter = _bundles.begin(); iter != _bundles.end(); ++iter)
131 IBRCOMMON_LOGGER_TAG(MemoryBundleStorage::TAG, error) <<
"Error while loading bundle data: " << ex.what() << IBRCOMMON_LOGGER_ENDL;
144 std::set<dtn::data::EID> ret;
146 ibrcommon::MutexLock l(_bundleslock);
148 for (bundle_list::const_iterator iter = _bundles.begin(); iter != _bundles.end(); ++iter)
159 ibrcommon::MutexLock l(_bundleslock);
171 pair<set<dtn::data::Bundle>::iterator,
bool> ret = _bundles.insert( bundle );
177 _priority_index.insert(m);
179 _bundle_lengths[m] =
size;
189 IBRCOMMON_LOGGER_DEBUG_TAG(MemoryBundleStorage::TAG, 5) <<
"got bundle duplicate " << bundle.
toString() << IBRCOMMON_LOGGER_ENDL;
195 ibrcommon::MutexLock l(_bundleslock);
196 return (_bundle_lengths.find(
id) != _bundle_lengths.end());
201 ibrcommon::MutexLock l(_bundleslock);
217 ibrcommon::MutexLock l(_bundleslock);
220 const bundle_list::const_iterator iter = find(_bundles.begin(), _bundles.end(), id);
238 ibrcommon::MutexLock l(_bundleslock);
240 for (bundle_list::const_iterator iter = _bundles.begin(); iter != _bundles.end(); ++iter)
249 _priority_index.clear();
251 _bundle_lengths.clear();
260 const bundle_list::iterator iter = find(_bundles.begin(), _bundles.end(), b);
263 if (iter != _bundles.end())
266 eventBundleRemoved(b);
279 void MemoryBundleStorage::__erase(
const bundle_list::iterator &iter)
284 _priority_index.erase(m);
288 _bundle_lengths.erase(m);
294 _bundles.erase(iter);
std::string toString() const
virtual dtn::data::MetaBundle info(const dtn::data::BundleID &id)
static void add(EventReceiver< E > *receiver)
std::set< dtn::data::EID > eid_set
dtn::data::Length size() const
virtual dtn::data::Bundle get(const dtn::data::BundleID &id)
virtual Length getLength(const dtn::data::Bundle &obj)
void remove(const dtn::data::BundleID &id)
virtual void componentDown()
virtual void store(const dtn::data::Bundle &bundle)
MemoryBundleStorage(const dtn::data::Length maxsize=0)
static void remove(const EventReceiver< E > *receiver)
void releaseCustody(const dtn::data::EID &custodian, const dtn::data::BundleID &id)
virtual const eid_set getDistinctDestinations()
virtual bool contains(const dtn::data::BundleID &id)
void freeSpace(const dtn::data::Length &size)
T & insert(iterator before)
static void raise(const dtn::data::Bundle &bundle)
void allocSpace(const dtn::data::Length &size)
void eventBundleAdded(const dtn::data::MetaBundle &b)
virtual void remove(const dtn::data::MetaBundle &bundle)
virtual const std::string getName() const
virtual ~MemoryBundleStorage()
void eventBundleRemoved(const dtn::data::BundleID &id)
static void raise(const dtn::data::MetaBundle &bundle, EventBundleAction action, dtn::data::StatusReportBlock::REASON_CODE reason=dtn::data::StatusReportBlock::NO_ADDITIONAL_INFORMATION)
virtual void add(const dtn::data::MetaBundle &bundle)
virtual void eventBundleExpired(const dtn::data::MetaBundle &b)
void raiseEvent(const dtn::core::TimeEvent &evt)
static bool isExpired(const dtn::data::Timestamp ×tamp, const dtn::data::Number &lifetime)
virtual void componentUp()
meta_set::const_iterator const_iterator