CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
QueryableVectorImpl.h
Go to the documentation of this file.
1 #ifndef INCLUDE_ORA_QUERYABLEVECTORIMPL_H
2 #define INCLUDE_ORA_QUERYABLEVECTORIMPL_H
3 
4 template <class Tp> ora::Range<Tp>::Range():m_data(new QueryableVectorData<Tp>){
5 }
6 
7 template <class Tp> ora::Range<Tp>::Range(boost::shared_ptr<ora::QueryableVectorData<Tp> >& data):m_data(data){
8 }
9 
10 template <class Tp> ora::Range<Tp>::Range(const ora::Range<Tp>& rhs):m_data(rhs.m_data){
11 }
12 
13 template <class Tp> ora::Range<Tp>::~Range(){
14 }
15 
16 template <class Tp> ora::Range<Tp>& ora::Range<Tp>::operator=(const ora::Range<Tp>& rhs){
17  if(&rhs != this){
18  m_data = rhs.m_data;
19  }
20  return *this;
21 }
22 
23 template <class Tp> typename ora::Range<Tp>::const_iterator ora::Range<Tp>::begin() const {
24  return m_data->cbegin();
25 }
26 
27 template <class Tp> typename ora::Range<Tp>::const_iterator ora::Range<Tp>::end() const {
28  return m_data->cend();
29 }
30 
31 template <class Tp> typename ora::Range<Tp>::const_reverse_iterator ora::Range<Tp>::rbegin() const {
32  return m_data->crbegin();
33 }
34 
35 template <class Tp> typename ora::Range<Tp>::const_reverse_iterator ora::Range<Tp>::rend() const {
36  return m_data->crend();
37 }
38 
39 template <class Tp> size_t ora::Range<Tp>::size() const {
40  return m_data->size();
41 }
42 
43 template <class Tp> size_t ora::Range<Tp>::frontIndex() const {
44  return m_data->front().first;
45 }
46 
47 template <class Tp> size_t ora::Range<Tp>::backIndex() const {
48  return m_data->back().first;
49 }
50 
51 
52 
53 template <class Tp> ora::Query<Tp>::Query(boost::shared_ptr<ora::IVectorLoader>& loader):LoaderClient(loader){
54 }
55 
56 template <class Tp>
57 template <typename Prim> void ora::Query<Tp>::addSelection(const std::string& dataMemberName, ora::SelectionItemType stype, Prim selectionData){
58  m_selection.addDataItem(dataMemberName, stype, selectionData);
59 }
60 
61 template <class Tp> size_t ora::Query<Tp>::count(){
62  return loader()->getSelectionCount( m_selection );
63 }
64 
66  boost::shared_ptr<QueryableVectorData<Tp> > newData ( new QueryableVectorData<Tp> );
67  loader()->loadSelection( m_selection, const_cast<void*>(newData->storageAddress()) );
68  return Range<Tp>( newData );
69 }
70 
71 template <class Tp> ora::QueryableVector<Tp>::QueryableVector():LoaderClient(),m_data(new QueryableVectorData<Tp>),m_isLocked(false),m_isLoaded(false){
72 }
73 
74 template <class Tp> ora::QueryableVector<Tp>::QueryableVector(size_t n, const Tp& value):LoaderClient(),m_data(new QueryableVectorData<Tp>(n,value)),m_isLocked(false),m_isLoaded(false){
75 }
76 
77 template <class Tp> ora::QueryableVector<Tp>::QueryableVector(const QueryableVector<Tp>& rhs):LoaderClient(rhs),m_data(rhs.m_data),m_isLocked(rhs.m_isLocked),m_isLoaded(rhs.m_isLoaded){
78 }
79 
81 }
82 
84  if(&rhs != this){
85  m_data = rhs.m_data;
86  m_isLocked = rhs.m_isLocked;
87  m_isLoaded = rhs.m_isLoaded;
88  }
89  return *this;
90 }
91 
92 template <class Tp> ora::Range<Tp> ora::QueryableVector<Tp>::select(int startIndex, int endIndex) const {
93  Selection sel;
94  sel.addIndexItem( startIndex, endIndex );
95  return select( sel );
96 }
97 
99  if(m_isLocked ){
100  throwException("The Vector is locked in writing mode, cannot make queries.","ora::QueryableVector<Tp>::select");
101  }
102  if(!hasLoader()){
103  throwException("The Loader is not installed.","ora::QueryableVector<Tp>::select");
104  }
105  boost::shared_ptr<QueryableVectorData<Tp> > newData ( new QueryableVectorData<Tp> );
106  loader()->loadSelection( sel, const_cast<void*>(newData->storageAddress()) );
107  return Range<Tp>(newData);
108 }
109 
111  if(m_isLocked ){
112  throwException("The Vector is locked in writing mode, cannot make queries.","ora::QueryableVector<Tp>::query");
113  }
114  if(!hasLoader()){
115  throwException("The Loader is not installed.","ora::QueryableVector<Tp>::query");
116  }
117  boost::shared_ptr<IVectorLoader> loaderH = loader();
118  return Query<Tp>(loaderH);
119 }
120 
121 template <class Tp> bool ora::QueryableVector<Tp>::lock() {
122  bool wasLocked = m_isLocked;
123  m_isLocked = true;
124  return wasLocked;
125 }
126 
127 template <class Tp> bool ora::QueryableVector<Tp>::isLocked() const {
128  return m_isLocked;
129 }
130 
132  initialize();
133  return m_data->begin();
134 }
135 
137  initialize();
138  return m_data->end();
139 }
140 
142  initialize();
143  return m_data->cbegin();
144 }
145 
147  initialize();
148  return m_data->cend();
149 }
150 
152  initialize();
153  return m_data->rbegin();
154 }
155 
157  initialize();
158  return m_data->rend();
159 }
160 
162  initialize();
163  return m_data->crbegin();
164 }
165 
167  return m_data->crend();
168 }
169 
170 template <class Tp> size_t ora::QueryableVector<Tp>::size() const {
171  initialize();
172  return m_data->size();
173 }
174 
175 template <class Tp> size_t ora::QueryableVector<Tp>::max_size() const {
176  return m_data->max_size();
177 }
178 
179 template <class Tp> void ora::QueryableVector<Tp>::resize(size_t n, const Tp& value){
180  initialize();
181  m_data->resize(n,value);
182 }
183 
184 template <class Tp> size_t ora::QueryableVector<Tp>::capacity() const {
185  return m_data->capacity();
186 }
187 
188 template <class Tp> bool ora::QueryableVector<Tp>::empty() const {
189  initialize();
190  return m_data->empty();
191 }
192 
193 template <class Tp> void ora::QueryableVector<Tp>::reserve(size_t n) {
194  m_data->reserve(n);
195 }
196 
198  initialize();
199  return m_data->operator[](n);
200 }
201 
203  initialize();
204  return m_data->operator[](n);
205 }
206 
207 template <class Tp> typename ora::QueryableVector<Tp>::const_reference ora::QueryableVector<Tp>::at( size_t n ) const {
208  initialize();
209  return m_data->operator[](n);
210 }
211 
213  initialize();
214  return m_data->operator[](n);
215 }
216 
218  return m_data->front();
219 }
220 
222  return m_data->front();
223 }
224 
226  return m_data->back();
227 }
228 
230  return m_data->back();
231 }
232 
233 template <class Tp> void ora::QueryableVector<Tp>::assign ( size_t n, const Tp& u ) {
234  m_data->assign(n,u);
235 }
236 
237 template <class Tp> void ora::QueryableVector<Tp>::push_back ( const Tp& x ){
238  initialize();
239  m_isLocked = true;
240  m_data->push_back(x);
241 }
242 
243 template <class Tp> void ora::QueryableVector<Tp>::pop_back (){
244  initialize();
245  m_isLocked = true;
246  m_data->pop_back();
247 }
248 
249 template <class Tp> void ora::QueryableVector<Tp>::clear ( ){
250  m_data->clear();
251  m_isLoaded = false;
252 }
253 
254 template <class Tp> void ora::QueryableVector<Tp>::reset ( ){
255  m_data->clear();
256  m_isLoaded = false;
257  m_isLocked = false;
258 }
259 
260 template <class Tp> bool ora::QueryableVector<Tp>::operator==(const ora::QueryableVector<Tp>& vec) const {
261  initialize();
262  vec.initialize();
263  return m_data->operator==(*vec.m_data);
264 }
265 
266 template <class Tp> bool ora::QueryableVector<Tp>::operator!=(const ora::QueryableVector<Tp>& vec) const {
267  initialize();
268  vec.initialize();
269  return m_data->operator!=(*vec.m_data);
270 }
271 
272 template <class Tp> size_t ora::QueryableVector<Tp>::persistentSize() const {
273  // not sure needs init...
274  //initialize();
275  return m_data->persistentSize();
276 }
277 
278 template <class Tp> const void* ora::QueryableVector<Tp>::storageAddress() const {
279  return m_data->storageAddress();
280 }
281 
282 template <class Tp> void ora::QueryableVector<Tp>::load() const {
283  initialize();
284 }
285 
286 template <class Tp> void ora::QueryableVector<Tp>::initialize() const {
287  if(hasLoader() && !m_isLocked && !m_isLoaded){
288  loader()->load(const_cast<void*>(m_data->storageAddress()));
289  m_isLoaded = true;
290  }
291 }
292 
293 #endif //
const_reverse_iterator rbegin() const
const_iterator end() const
const_iterator begin() const
size_t persistentSize() const
void addSelection(const std::string &dataMemberName, SelectionItemType stype, Prim selectionData)
QueryableVector< Tp > & operator=(const QueryableVector< Tp > &rhs)
const Tp & const_reference
bool operator!=(const QueryableVector &vec) const
Range< Tp > select(int startIndex, int endIndex=Selection::endOfRange) const
const void * storageAddress() const
reference operator[](size_t n)
void resize(size_t n, const Tp &value=Tp())
virtual ~Range()
void assign(size_t n, const Tp &u)
reverse_iterator rbegin()
size_t size() const
void push_back(const Tp &x)
Range & operator=(const Range &rhs)
boost::shared_ptr< QueryableVectorData< Tp > > m_data
void addIndexItem(int startIndex, int endIndex=endOfRange)
Definition: Selection.cc:54
size_t backIndex() const
reverse_iterator rend()
bool operator==(const QueryableVector &vec) const
size_t frontIndex() const
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:10
const_reverse_iterator rend() const
Definition: DDAxes.h:10
Query(boost::shared_ptr< IVectorLoader > &loader)
Range< Tp > execute()
Query< Tp > query() const
reference at(size_t n)
boost::shared_ptr< QueryableVectorData< Tp > > m_data
SelectionItemType
Definition: Selection.h:13