CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Container.h
Go to the documentation of this file.
1 #ifndef INCLUDE_ORA_CONTAINER_H
2 #define INCLUDE_ORA_CONTAINER_H
3 
4 #include "Object.h"
5 #include "Handle.h"
6 //
7 #include <typeinfo>
8 #include <boost/shared_ptr.hpp>
9 
10 namespace ora {
11 
12  class IteratorBuffer;
13  class DatabaseContainer;
14 
16 
17  public:
18  ContainerIterator( Handle<IteratorBuffer>& iteratorBuffer );
19 
21 
22  virtual ~ContainerIterator();
23 
25 
26  Object getItem();
27 
28  template <typename T> boost::shared_ptr<T> get();
29 
30  int itemId();
31 
32  bool next();
33 
34  void reset();
35 
36  private:
37  boost::shared_ptr<void> getItemAsType( const std::type_info& asTypeInfo );
38 
39  private:
41  };
42 
43  class Container {
44 
45  public:
46  Container( Handle<DatabaseContainer>& dbContainer );
47 
48  Container( const Container& rhs );
49 
50  virtual ~Container();
51 
52  Container& operator=( const Container& rhs );
53 
54  int id();
55 
56  const std::string& name();
57 
58  const std::string& className();
59 
60  const std::string& mappingVersion();
61 
62  size_t size();
63 
64  void extendSchema( const std::type_info& typeInfo );
65 
66  template <typename T> void extendSchema();
67 
69 
70  Object fetchItem( int itemId );
71 
72  template <typename T> boost::shared_ptr<T> fetch( int itemId );
73 
74  int insertItem( const Object& data );
75 
76  template <typename T> int insert( const T& data );
77 
78  void updateItem( int itemId, const Object& data );
79 
80  template <typename T> void update( int itemId, const T& data );
81 
82  void erase( int itemId );
83 
84  void flush();
85 
86  void setItemName( const std::string& name, int itemId );
87 
88  bool getNames( std::vector<std::string>& destination );
89 
90  private:
91  boost::shared_ptr<void> fetchItemAsType(int itemId, const std::type_info& asTypeInfo);
92  int insertItem( const void* data, const std::type_info& typeInfo );
93  void updateItem( int itemId, const void* data, const std::type_info& typeInfo );
94 
95 
96 
97  private:
99  };
100 
101 }
102 
103 template <typename T>
104 inline
105 boost::shared_ptr<T> ora::ContainerIterator::get(){
106  return boost::static_pointer_cast<T>( getItemAsType( typeid(T) ));
107 }
108 
109 template <typename T>
110 inline
112  extendSchema( typeid(T) );
113 }
114 
115 template <typename T>
116 inline
117 boost::shared_ptr<T> ora::Container::fetch( int itemId){
118  return boost::static_pointer_cast<T>( fetchItemAsType( itemId, typeid(T) ));
119 }
120 
121 template <typename T>
122 inline
124  return insertItem( &data, typeid( data ) );
125 }
126 
127 template <typename T>
128 inline
129 void ora::Container::update( int itemId, const T& data ){
130  return updateItem( itemId, &data, typeid( data ) );
131 }
132 
133 #endif
int insert(const T &data)
Definition: Container.h:123
void updateItem(int itemId, const Object &data)
Definition: Container.cc:116
Handle< IteratorBuffer > m_buffer
Definition: Container.h:40
const std::string & name()
Definition: Container.cc:63
int insertItem(const Object &data)
Definition: Container.cc:101
boost::shared_ptr< T > get()
Definition: Container.h:105
Object fetchItem(int itemId)
Definition: Container.cc:89
virtual ~Container()
Definition: Container.cc:51
void setItemName(const std::string &name, int itemId)
Definition: Container.cc:141
const std::string & className()
Definition: Container.cc:67
const std::string & mappingVersion()
Definition: Container.cc:71
void update(int itemId, const T &data)
Definition: Container.h:129
boost::shared_ptr< void > fetchItemAsType(int itemId, const std::type_info &asTypeInfo)
Definition: Container.cc:93
void extendSchema()
Definition: Container.h:111
Container(Handle< DatabaseContainer > &dbContainer)
Definition: Container.cc:43
void erase(int itemId)
Definition: Container.cc:133
boost::shared_ptr< void > getItemAsType(const std::type_info &asTypeInfo)
Definition: Container.cc:37
boost::shared_ptr< T > fetch(int itemId)
Definition: Container.h:117
size_t size()
Definition: Container.cc:75
Container & operator=(const Container &rhs)
Definition: Container.cc:54
virtual ~ContainerIterator()
Definition: Container.cc:13
bool getNames(std::vector< std::string > &destination)
Definition: Container.cc:146
long double T
Handle< DatabaseContainer > m_dbContainer
Definition: Container.h:98
ContainerIterator iterator()
Definition: Container.cc:79
ContainerIterator & operator=(const ContainerIterator &rhs)
Definition: Container.cc:16
ContainerIterator(Handle< IteratorBuffer > &iteratorBuffer)
Definition: Container.cc:5