CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
QueryableVectorData.h
Go to the documentation of this file.
1 #ifndef INCLUDE_ORA_QUERYABLEVECTORDATA_H
2 #define INCLUDE_ORA_QUERYABLEVECTORDATA_H
3 
4 #include "PVector.h"
5 //
6 #include <boost/shared_ptr.hpp>
7 
8 namespace ora {
9 
10  class Selection;
11 
12  class IVectorLoader {
13  public:
14 
15  // destructor
16  virtual ~IVectorLoader(){
17  }
18 
19  public:
20 
21  // triggers the data loading
22  virtual bool load(void* address) const=0;
23 
24  virtual bool loadSelection(const ora::Selection& selection, void* address) const=0;
25 
26  virtual size_t getSelectionCount( const ora::Selection& selection ) const=0;
27 
28  // notify the underlying storage system that the embedded object has been destructed.
29  // maybe not required...
30  //virtual void notify() const=0;
31 
32  // invalidates the current loader. Called by the underlying service at his destruction time.
33  virtual void invalidate()=0;
34 
35  // queries the validity of the current relation with the underlying storage system
36  virtual bool isValid() const=0;
37 
38  };
39 
40 
41 
42  template <typename Tp> class Iterator {
43 
44  public:
45  Iterator( typename ora::PVector<std::pair<size_t,Tp> >::iterator vectorIterator):m_vecIterator(vectorIterator){
46  }
47 
49  }
50 
51  Iterator& operator=( const Iterator& rhs ){
53  }
54  virtual ~Iterator(){
55  }
56 
57  bool operator==( const Iterator& rhs ) const{
58  return m_vecIterator == rhs.m_vecIterator;
59  }
60 
61  bool operator!=( const Iterator& rhs ) const {
62  return m_vecIterator != rhs.m_vecIterator;
63  }
64 
66  ++m_vecIterator;
67  return *this;
68  }
69 
71  this->operator++();
72  return *this;
73  }
74 
75  size_t index(){
76  return m_vecIterator->first;
77  }
78 
79  Tp* operator->() { return &m_vecIterator->second; }
80  Tp& operator*() { return m_vecIterator->second; }
81 
82  private:
84 
85  };
86 
87  template <typename Tp> class CIterator {
88 
89  public:
90  CIterator( typename ora::PVector<std::pair<size_t,Tp> >::const_iterator vectorIterator):m_vecIterator(vectorIterator){
91  }
92 
94  }
95 
96  CIterator& operator=( const CIterator& rhs ){
98  }
99 
100  virtual ~CIterator(){
101  }
102 
103  bool operator==( const CIterator& rhs ) const{
104  return m_vecIterator == rhs.m_vecIterator;
105  }
106 
107  bool operator!=( const CIterator& rhs ) const {
108  return m_vecIterator != rhs.m_vecIterator;
109  }
110 
112  ++m_vecIterator;
113  return *this;
114  }
115 
117  this->operator++();
118  return *this;
119  }
120 
121  size_t index(){
122  return m_vecIterator->first;
123  }
124 
125  const Tp* operator->() const { return &m_vecIterator->second; }
126  const Tp& operator*() const { return m_vecIterator->second; }
127 
128  private:
130  };
131 
132  template <typename Tp> class RIterator {
133 
134  public:
135  RIterator( typename ora::PVector<std::pair<size_t,Tp> >::reverse_iterator vectorIterator):m_vecIterator(vectorIterator){
136  }
137 
139  }
140 
141  RIterator& operator=( const RIterator& rhs ){
143  }
144 
145  virtual ~RIterator(){
146  }
147 
148  bool operator==( const RIterator& rhs ) const{
149  return m_vecIterator == rhs.m_vecIterator;
150  }
151 
152  bool operator!=( const RIterator& rhs ) const {
153  return m_vecIterator != rhs.m_vecIterator;
154  }
155 
157  ++m_vecIterator;
158  return *this;
159  }
160 
162  this->operator++();
163  return *this;
164  }
165 
166  size_t index(){
167  return m_vecIterator->first;
168  }
169 
170  Tp* operator->() { return &m_vecIterator->second; }
171  Tp& operator*() { return m_vecIterator->second; }
172 
173  private:
174  typename ora::PVector<std::pair<size_t, Tp> >::reverse_iterator m_vecIterator;
175  };
176 
177  template <typename Tp> class CRIterator {
178 
179  public:
180  CRIterator( typename ora::PVector<std::pair<size_t,Tp> >::const_reverse_iterator vectorIterator):m_vecIterator(vectorIterator){
181  }
182 
184  }
185 
188  }
189 
190  virtual ~CRIterator(){
191  }
192 
193  bool operator==( const CRIterator& rhs ) const{
194  return m_vecIterator == rhs.m_vecIterator;
195  }
196 
197  bool operator!=( const CRIterator& rhs ) const {
198  return m_vecIterator != rhs.m_vecIterator;
199  }
200 
202  ++m_vecIterator;
203  return *this;
204  }
205 
207  this->operator++();
208  return *this;
209  }
210 
211  size_t index(){
212  return m_vecIterator->first;
213  }
214 
215  const Tp* operator->() const { return &m_vecIterator->second; }
216  const Tp& operator*() const { return m_vecIterator->second; }
217 
218  private:
219  typename ora::PVector<std::pair<size_t, Tp> >::const_reverse_iterator m_vecIterator;
220  };
221 
222  class IVectorData {
223  public:
224  virtual ~IVectorData(){
225  }
226 
227  virtual const void* storageAddress() const=0;
228  };
229 
230  template <typename Tp> class QueryableVectorData: public IVectorData {
231 
232  public:
233 
238  typedef typename std::pair<size_t,Tp> store_item_type;
241 
242  public:
243 
245  QueryableVectorData(size_t n, const Tp& value=Tp()):IVectorData(),m_vec(n,std::make_pair(0,value)){}
246 
248  return iterator(m_vec.begin());
249  }
250 
252  return iterator(m_vec.end());
253  }
254 
256  return const_iterator(m_vec.begin());
257  }
258 
260  return const_iterator(m_vec.end());
261  }
262 
264  return reverse_iterator(m_vec.rbegin());
265  }
266 
268  return reverse_iterator(m_vec.rend());
269  }
270 
273  }
274 
277  }
278 
279  const Tp& operator[](size_t n) const { return m_vec[n].second; }
280  Tp& operator[](size_t n) { return m_vec[n].second; }
281 
282  const Tp& back() const { return m_vec.back().second; }
283  Tp& back() { return m_vec.back().second; }
284 
285  const Tp& front() const { return m_vec.front().second; }
286  Tp& front() { return m_vec.front().second; }
287 
288  void assign ( size_t n, const Tp& u ) {
289  for(size_t i=0;i<n;i++) push_back(u);
290  }
291 
292  void push_back ( const Tp& x ){
293  m_vec.push_back(std::make_pair(m_vec.size(),x));
294  }
295 
296  void pop_back (){
297  m_vec.pop_back();
298  }
299 
300  size_t size() const {
301  return m_vec.size();
302  }
303 
304  size_t max_size() const {
305  return m_vec.max_size();
306  }
307 
308  void resize(size_t n, const Tp& value=Tp()){
309  size_t sz = size();
310  for(size_t i=sz;i>n;i--) pop_back();
311  for(size_t i=n;i>sz;i--) push_back(value);
312  }
313 
314  size_t capacity() const {
315  return m_vec.capacity();
316  }
317 
318  bool empty() const {
319  return m_vec.empty();
320  }
321 
322  void reserve(size_t n) {
323  m_vec.reserve(n);
324  }
325 
326  void clear(){
327  m_vec.clear();
328  }
329 
330  bool operator==(const QueryableVectorData& rhs) const { return m_vec==rhs.m_vec; }
331  bool operator!=(const QueryableVectorData& rhs) const { return m_vec!=rhs.m_vec; }
332 
333  const void* storageAddress() const {
334  return &m_vec;
335  }
336 
337  size_t persistentSize() const {
338  return m_vec.persistentSize();
339  }
340 
341  //...
342  private:
343 
344  // private vector
346  };
347 
348  class LoaderClient {
349 
350  public:
351  LoaderClient();
352 
353  virtual ~LoaderClient();
354 
355  explicit LoaderClient(boost::shared_ptr<IVectorLoader>& loader);
356 
357  LoaderClient( const LoaderClient& rhs );
358 
359  LoaderClient& operator=(const LoaderClient& rhs );
360 
361  bool hasLoader() const;
362 
363  boost::shared_ptr<IVectorLoader> loader() const;
364 
365  void reset();
366 
367  void install(boost::shared_ptr<IVectorLoader>& loader);
368 
369  private:
370  mutable boost::shared_ptr<IVectorLoader> m_loader;
371 
372  };
373 
374 }
375 
376 #endif //
CIterator(typename ora::PVector< std::pair< size_t, Tp > >::const_iterator vectorIterator)
void push_back(const Tp &x)
Definition: PVector.h:177
RIterator(const RIterator &rhs)
int i
Definition: DBlmapReader.cc:9
ora::PVector< std::pair< size_t, Tp > >::reverse_iterator m_vecIterator
reverse_iterator rend()
Definition: PVector.h:87
CRIterator & operator++()
RIterator(typename ora::PVector< std::pair< size_t, Tp > >::reverse_iterator vectorIterator)
char * address
Definition: mlp_lapack.h:14
RIterator & operator=(const RIterator &rhs)
iterator end()
Definition: PVector.h:67
RIterator & operator++()
void clear()
Definition: PVector.h:187
bool operator!=(const Iterator &rhs) const
iterator begin()
Definition: PVector.h:62
const_reverse_iterator crend() const
bool operator==(const CIterator &rhs) const
ora::PVector< std::pair< size_t, Tp > >::store_type store_type
CRIterator(const CRIterator &rhs)
bool operator==(const Iterator &rhs) const
Iterator(typename ora::PVector< std::pair< size_t, Tp > >::iterator vectorIterator)
LoaderClient & operator=(const LoaderClient &rhs)
void install(boost::shared_ptr< IVectorLoader > &loader)
size_type max_size() const
Definition: PVector.h:107
const Tp & operator*() const
reference back()
Definition: PVector.h:162
size_type persistentSize() const
Definition: PVector.h:212
bool operator!=(const CIterator &rhs) const
bool empty() const
Definition: PVector.h:122
const Tp & operator[](size_t n) const
std::pair< size_t, Tp > store_item_type
const Tp & operator*() const
RIterator operator++(int)
boost::shared_ptr< IVectorLoader > loader() const
CRIterator(typename ora::PVector< std::pair< size_t, Tp > >::const_reverse_iterator vectorIterator)
const_iterator cend() const
QueryableVectorData(size_t n, const Tp &value=Tp())
void pop_back()
Definition: PVector.h:182
Iterator & operator=(const Iterator &rhs)
virtual bool load(void *address) const =0
reverse_iterator rbegin()
Definition: PVector.h:82
CIterator & operator++()
Iterator & operator++()
Iterator operator++(int)
reference front()
Definition: PVector.h:152
CIterator operator++(int)
virtual bool isValid() const =0
CRIterator & operator=(const CRIterator &rhs)
const Tp * operator->() const
void resize(size_t n, const Tp &value=Tp())
virtual bool loadSelection(const ora::Selection &selection, void *address) const =0
void assign(size_t n, const Tp &u)
ora::PVector< std::pair< size_t, Tp > > store_base_type
CIterator & operator=(const CIterator &rhs)
CRIterator operator++(int)
bool operator!=(const QueryableVectorData &rhs) const
const_iterator cbegin() const
bool operator==(const QueryableVectorData &rhs) const
virtual size_t getSelectionCount(const ora::Selection &selection) const =0
size_type size() const
Definition: PVector.h:102
virtual void invalidate()=0
bool operator!=(const RIterator &rhs) const
ora::PVector< std::pair< size_t, Tp > >::iterator m_vecIterator
bool operator!=(const CRIterator &rhs) const
bool operator==(const CRIterator &rhs) const
ora::PVector< std::pair< size_t, Tp > >::const_iterator m_vecIterator
void reserve(size_type n)
Definition: PVector.h:127
const_reverse_iterator crbegin() const
bool operator==(const RIterator &rhs) const
const Tp * operator->() const
size_type capacity() const
Definition: PVector.h:117
ora::PVector< std::pair< size_t, Tp > >::const_reverse_iterator m_vecIterator
Definition: DDAxes.h:10
const void * storageAddress() const
CIterator(const CIterator &rhs)
CRIterator< Tp > const_reverse_iterator
boost::shared_ptr< IVectorLoader > m_loader
virtual const void * storageAddress() const =0
Iterator(const Iterator &rhs)