CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/CondCore/ORA/interface/QueryableVectorImpl.h

Go to the documentation of this file.
00001 #ifndef INCLUDE_ORA_QUERYABLEVECTORIMPL_H
00002 #define INCLUDE_ORA_QUERYABLEVECTORIMPL_H
00003 
00004 template <class Tp> ora::Range<Tp>::Range():m_data(new QueryableVectorData<Tp>){
00005 }
00006 
00007 template <class Tp> ora::Range<Tp>::Range(boost::shared_ptr<ora::QueryableVectorData<Tp> >& data):m_data(data){
00008 }
00009 
00010 template <class Tp> ora::Range<Tp>::Range(const ora::Range<Tp>& rhs):m_data(rhs.m_data){
00011 }
00012 
00013 template <class Tp> ora::Range<Tp>::~Range(){
00014 }
00015       
00016 template <class Tp> ora::Range<Tp>& ora::Range<Tp>::operator=(const ora::Range<Tp>& rhs){
00017   if(&rhs != this){
00018     m_data = rhs.m_data;
00019   }
00020   return *this;
00021 }
00022 
00023 template <class Tp> typename ora::Range<Tp>::const_iterator ora::Range<Tp>::begin() const {
00024   return m_data->cbegin();
00025 }
00026 
00027 template <class Tp> typename ora::Range<Tp>::const_iterator ora::Range<Tp>::end() const {
00028   return m_data->cend();
00029 }
00030 
00031 template <class Tp> typename ora::Range<Tp>::const_reverse_iterator ora::Range<Tp>::rbegin() const {
00032   return m_data->crbegin();
00033 }
00034 
00035 template <class Tp> typename ora::Range<Tp>::const_reverse_iterator ora::Range<Tp>::rend() const {
00036   return m_data->crend();
00037 }
00038 
00039 template <class Tp> size_t ora::Range<Tp>::size() const {
00040   return m_data->size();
00041 }
00042 
00043 template <class Tp> size_t ora::Range<Tp>::frontIndex() const {
00044   return m_data->front().first;
00045 }
00046 
00047 template <class Tp> size_t ora::Range<Tp>::backIndex() const {
00048   return m_data->back().first;
00049 }
00050 
00051 
00052 
00053 template <class Tp> ora::Query<Tp>::Query(boost::shared_ptr<ora::IVectorLoader>& loader):LoaderClient(loader){
00054 }
00055 
00056 template <class Tp>
00057 template <typename Prim> void ora::Query<Tp>::addSelection(const std::string& dataMemberName, ora::SelectionItemType stype, Prim selectionData){
00058   m_selection.addDataItem(dataMemberName, stype, selectionData);
00059 }
00060 
00061 template <class Tp> size_t ora::Query<Tp>::count(){
00062   return loader()->getSelectionCount( m_selection );
00063 }
00064 
00065 template <class Tp> ora::Range<Tp> ora::Query<Tp>::execute(){
00066   boost::shared_ptr<QueryableVectorData<Tp> > newData ( new QueryableVectorData<Tp> );
00067   loader()->loadSelection( m_selection, const_cast<void*>(newData->storageAddress()) );
00068   return Range<Tp>( newData );
00069 }
00070 
00071 template <class Tp> ora::QueryableVector<Tp>::QueryableVector():LoaderClient(),m_data(new QueryableVectorData<Tp>),m_isLocked(false),m_isLoaded(false){
00072 }
00073     
00074 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){
00075 }
00076     
00077 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){
00078 }
00079 
00080 template <class Tp> ora::QueryableVector<Tp>::~QueryableVector(){
00081 }
00082 
00083 template <class Tp> ora::QueryableVector<Tp>& ora::QueryableVector<Tp>::operator=(const ora::QueryableVector<Tp>& rhs){
00084   if(&rhs != this){
00085     m_data = rhs.m_data;
00086     m_isLocked = rhs.m_isLocked;
00087     m_isLoaded = rhs.m_isLoaded;
00088   }
00089   return *this;
00090 }
00091 
00092 template <class Tp> ora::Range<Tp> ora::QueryableVector<Tp>::select(int startIndex, int endIndex) const {
00093   Selection sel;
00094   sel.addIndexItem( startIndex, endIndex );
00095   return select( sel );
00096 }
00097     
00098 template <class Tp> ora::Range<Tp> ora::QueryableVector<Tp>::select(const ora::Selection& sel) const {
00099   if(m_isLocked ){
00100     throwException("The Vector is locked in writing mode, cannot make queries.","ora::QueryableVector<Tp>::select");
00101   }
00102   if(!hasLoader()){
00103     throwException("The Loader is not installed.","ora::QueryableVector<Tp>::select");
00104   }
00105   boost::shared_ptr<QueryableVectorData<Tp> > newData ( new QueryableVectorData<Tp> );
00106   loader()->loadSelection( sel, const_cast<void*>(newData->storageAddress()) );
00107   return Range<Tp>(newData);
00108 }
00109 
00110 template <class Tp> ora::Query<Tp> ora::QueryableVector<Tp>::query() const{
00111   if(m_isLocked ){
00112     throwException("The Vector is locked in writing mode, cannot make queries.","ora::QueryableVector<Tp>::query");
00113   }
00114   if(!hasLoader()){
00115     throwException("The Loader is not installed.","ora::QueryableVector<Tp>::query");
00116   }
00117   boost::shared_ptr<IVectorLoader> loaderH = loader();
00118   return Query<Tp>(loaderH);
00119 }
00120     
00121 template <class Tp> bool ora::QueryableVector<Tp>::lock() {
00122   bool wasLocked = m_isLocked;
00123   m_isLocked = true;
00124   return wasLocked;
00125 }
00126         
00127 template <class Tp> bool ora::QueryableVector<Tp>::isLocked() const {
00128   return m_isLocked;
00129 }
00130 
00131 template <class Tp> typename ora::QueryableVector<Tp>::iterator ora::QueryableVector<Tp>::begin(){
00132   initialize();
00133   return m_data->begin();
00134 }
00135 
00136 template <class Tp> typename ora::QueryableVector<Tp>::iterator ora::QueryableVector<Tp>::end(){
00137   initialize();
00138   return m_data->end();
00139 }
00140 
00141 template <class Tp> typename ora::QueryableVector<Tp>::const_iterator ora::QueryableVector<Tp>::begin() const {
00142   initialize();
00143   return m_data->cbegin();
00144 }
00145 
00146 template <class Tp> typename ora::QueryableVector<Tp>::const_iterator ora::QueryableVector<Tp>::end() const {
00147   initialize();
00148   return m_data->cend();
00149 }
00150 
00151 template <class Tp> typename ora::QueryableVector<Tp>::reverse_iterator ora::QueryableVector<Tp>::rbegin(){
00152   initialize();
00153   return m_data->rbegin();
00154 }
00155     
00156 template <class Tp> typename ora::QueryableVector<Tp>::reverse_iterator ora::QueryableVector<Tp>::rend(){
00157   initialize();
00158   return m_data->rend();
00159 }
00160     
00161 template <class Tp> typename ora::QueryableVector<Tp>::const_reverse_iterator ora::QueryableVector<Tp>::rbegin() const {
00162   initialize();
00163   return m_data->crbegin();
00164 }
00165     
00166 template <class Tp> typename ora::QueryableVector<Tp>::const_reverse_iterator ora::QueryableVector<Tp>::rend() const {
00167   return m_data->crend();
00168 }
00169 
00170 template <class Tp> size_t ora::QueryableVector<Tp>::size() const {
00171   initialize();
00172   return m_data->size();
00173 }
00174 
00175 template <class Tp> size_t ora::QueryableVector<Tp>::max_size() const {
00176   return m_data->max_size();
00177 }
00178     
00179 template <class Tp> void ora::QueryableVector<Tp>::resize(size_t n, const Tp& value){
00180   initialize();
00181   m_data->resize(n,value);
00182 }
00183     
00184 template <class Tp> size_t ora::QueryableVector<Tp>::capacity() const {
00185   return m_data->capacity();
00186 }
00187     
00188 template <class Tp> bool ora::QueryableVector<Tp>::empty() const {
00189   initialize();
00190   return m_data->empty();
00191 }
00192     
00193 template <class Tp> void ora::QueryableVector<Tp>::reserve(size_t n) {
00194   m_data->reserve(n);
00195 }
00196 
00197 template <class Tp> typename ora::QueryableVector<Tp>::reference ora::QueryableVector<Tp>::operator[] ( size_t n ){
00198   initialize();
00199   return m_data->operator[](n);
00200 }
00201 
00202 template <class Tp> typename ora::QueryableVector<Tp>::const_reference ora::QueryableVector<Tp>::operator[] ( size_t n ) const {
00203   initialize();
00204   return m_data->operator[](n);
00205 }
00206 
00207 template <class Tp> typename ora::QueryableVector<Tp>::const_reference ora::QueryableVector<Tp>::at( size_t n ) const {
00208   initialize();
00209   return m_data->operator[](n);
00210 }
00211     
00212 template <class Tp> typename ora::QueryableVector<Tp>::reference ora::QueryableVector<Tp>::at( size_t n ) {
00213   initialize();
00214   return m_data->operator[](n);
00215 }
00216 
00217 template <class Tp> typename ora::QueryableVector<Tp>::reference ora::QueryableVector<Tp>::front ( ) {
00218   return m_data->front();
00219 }
00220     
00221 template <class Tp> typename ora::QueryableVector<Tp>::const_reference ora::QueryableVector<Tp>::front ( ) const {
00222   return m_data->front();
00223 }
00224     
00225 template <class Tp> typename ora::QueryableVector<Tp>::reference ora::QueryableVector<Tp>::back ( ) {
00226   return m_data->back();
00227 }
00228     
00229 template <class Tp> typename ora::QueryableVector<Tp>::const_reference ora::QueryableVector<Tp>::back ( ) const {
00230   return m_data->back();
00231 }
00232 
00233 template <class Tp> void ora::QueryableVector<Tp>::assign ( size_t n, const Tp& u ) {
00234   m_data->assign(n,u);
00235 }
00236 
00237 template <class Tp> void ora::QueryableVector<Tp>::push_back ( const Tp& x ){
00238   initialize();
00239   m_isLocked = true;
00240   m_data->push_back(x);
00241 }
00242 
00243 template <class Tp> void ora::QueryableVector<Tp>::pop_back (){
00244   initialize();
00245   m_isLocked = true;
00246   m_data->pop_back();
00247 }
00248 
00249 template <class Tp> void ora::QueryableVector<Tp>::clear ( ){
00250   m_data->clear();
00251   m_isLoaded = false;
00252 }
00253 
00254 template <class Tp> void ora::QueryableVector<Tp>::reset ( ){
00255   m_data->clear();
00256   m_isLoaded = false;
00257   m_isLocked = false;
00258 }
00259 
00260 template <class Tp> bool ora::QueryableVector<Tp>::operator==(const ora::QueryableVector<Tp>& vec) const {
00261   initialize();
00262   vec.initialize();
00263   return m_data->operator==(*vec.m_data);
00264 }
00265 
00266 template <class Tp> bool ora::QueryableVector<Tp>::operator!=(const ora::QueryableVector<Tp>& vec) const {
00267   initialize();
00268   vec.initialize();
00269   return m_data->operator!=(*vec.m_data);
00270 }
00271 
00272 template <class Tp> size_t ora::QueryableVector<Tp>::persistentSize() const {
00273   // not sure needs init...
00274   //initialize();
00275   return m_data->persistentSize();
00276 }
00277 
00278 template <class Tp> const void* ora::QueryableVector<Tp>::storageAddress() const {
00279   return m_data->storageAddress();
00280 }
00281 
00282 template <class Tp> void ora::QueryableVector<Tp>::load() const {
00283   initialize();
00284 }
00285 
00286 template <class Tp> void ora::QueryableVector<Tp>::initialize() const {
00287   if(hasLoader() && !m_isLocked && !m_isLoaded){
00288     loader()->load(const_cast<void*>(m_data->storageAddress()));
00289     m_isLoaded = true;
00290   }
00291 }
00292 
00293 #endif  //