IBR-DTNSuite  0.12
MemoryBundleSet.h
Go to the documentation of this file.
1 /*
2  * MemoryBundleSet.h
3  *
4  * Copyright (C) 2013 IBR, TU Braunschweig
5  *
6  * Written-by: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  * Created on: 18.12.2012
21  * renamed from BundleSet.h 04.04.2013
22  */
23 
24 #ifndef MEMORYBUNDLESET_H_
25 #define MEMORYBUNDLESET_H_
26 
28 #include "ibrdtn/data/BundleSet.h"
29 #include "ibrdtn/data/MetaBundle.h"
31 #include <ibrcommon/data/File.h>
32 #include <set>
33 
34 namespace dtn
35 {
36  namespace data
37  {
39  {
40  public:
46  MemoryBundleSet(BundleSet::Listener *listener = NULL, Length bf_size = 1024);
47 
54  MemoryBundleSet(const std::string &name, BundleSet::Listener *listener = NULL, Length bf_size = 1024);
55 
59  virtual ~MemoryBundleSet();
60 
64  virtual refcnt_ptr<BundleSetImpl> copy() const;
65 
70  virtual void assign(const refcnt_ptr<BundleSetImpl>&);
71 
75  virtual void add(const dtn::data::MetaBundle &bundle) throw ();
76 
80  virtual void clear() throw ();
81 
85  virtual bool has(const dtn::data::BundleID &bundle) const throw ();
86 
90  virtual void expire(const Timestamp timestamp) throw ();
91 
95  virtual Size size() const throw ();
96 
100  Length getLength() const throw ();
101 
105  const ibrcommon::BloomFilter& getBloomFilter() const throw ();
106 
110  std::set<dtn::data::MetaBundle> getNotIn(const ibrcommon::BloomFilter &filter) const throw ();
111 
115  virtual std::ostream &serialize(std::ostream &stream) const;
116 
120  virtual std::istream &deserialize(std::istream &stream);
121 
125  static void setPath(const ibrcommon::File &path);
126 
130  virtual void sync() throw ();
131 
132  private:
136  void store();
137 
141  void restore();
142 
143  // If this is a named bundle-set the name is stored here
144  const std::string _name;
145 
146  // All meta-bundles are stored in this set of bundles
147  typedef std::set<dtn::data::MetaBundle> bundle_set;
148  bundle_set _bundles;
149 
150  // Bundles are sorted in this set to find expired bundles easily
151  typedef std::set<BundleSetImpl::ExpiringBundle> expire_set;
152  expire_set _expire;
153 
154  // The initial size of the bloom-filter
155  Length _bf_size;
156 
157  // The bloom-filter with all the bundles
159 
160  // The assigned listener
161  BundleSet::Listener *_listener;
162 
163  // Mark the bloom-filter and set of bundles as consistent
164  bool _consistent;
165 
166  static ibrcommon::File __store_path__;
167  static bool __store_path_set__;
168  };
169  } /* namespace data */
170 } /* namespace dtn */
171 #endif /* MEMORYBUNDLESET_H_ */