1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_dbos_Repository_hpp
10 #define anna_dbos_Repository_hpp
14 #include <anna/core/mt/Mutex.hpp>
16 #include <anna/dbos/StorageArea.hpp>
17 #include <anna/dbos/defines.hpp>
37 Clase que modela la interaccion entre la base y nuestra aplicacion.
39 class Repository : public Mutex {
41 typedef std::map <StorageId, StorageArea*> container;
42 typedef container::const_iterator const_storage_iterator; /**<Iterador para acceder a las areas de almacenamiento de esta base de datos */
43 typedef container::iterator storage_iterator; /**<Iterador para acceder a las areas de almacenamiento de esta base de datos */
47 \param name Nombre logico del repositorio de areas de almacenamiento.
49 explicit Repository(const char* name);
53 \param name Nombre logico del repositorio de areas de almacenamiento.
55 explicit Repository(const std::string& name);
58 Crea una nueva area de almacenamiento para objetos cargados a partir de un medio fisico, normalmente
61 El tipo de dato de esta nueva area vendria definida implicitamente por el tipo de factoria empleadas
62 para instanciar y/o liberar los objetos y sus respectivos registros.
64 \param index Clave que seria usada para localizar el area de almacenamiento.
65 \param name Nombre logico de la nueva area de almacenamiento.
66 \param maxSize Limita el numero maximo de objetos que pueden estar cargados simultanemante en memoria.
67 Si se alcanza este limite pero no hay ningun objeto susceptible de ser sacado de la memoria de almacenamiento
68 se ampliaria automaticamente la reserva de memoria necesaria para cargar nuevos objetos, en tanto en cuanto
69 no se libere alguno de los objetos cargados. Ver StorageArea::StandardSize.
70 \param objectAllocator actoria de objetos usada para crear las nuevas instancias en este area de
72 \param errorCode Cdigo de error asociado a la excepcin lanzada por el metodo StorageArea::instantiate
73 en caso de que no se encuentre el objeto buscado. Si vale StorageArea::NoExceptionWhenNotFound en
74 caso de no encontrar el objeto no se devolveriaexcepcin y el valor retornado seria NULL.
75 \param aamm Modo de acceso de este area de almacenamiento.
77 \warning Las dos actorias deben estar disponibles desde el momento de invocar a este metodo hasta la
78 finalizacin de esta instancia de base de datos.
80 StorageArea* createStorageArea(const StorageId index, const char* name, const Size maxSize, ObjectAllocator objectAllocator, const int errorCode, const StorageArea::AccessMode::_v aamm = StorageArea::AccessMode::ReadOnly)
81 throw(RuntimeException);
84 Devuelve la instancia del area de almacenamiento asociada al indice recibido.
86 \param index Indice del area de almacenamiento.
88 \return La instancia del area de almacenamiento asociada al indice recibido. Puede ser NULL si el
89 indice no fue usado para crear un area mediate #createStorageArea.
91 StorageArea* findStorageArea(const StorageId index) throw();
94 Elimina todos los objetos cargados en las areas de almacenamiento definidas.
96 void clear() throw(RuntimeException);
99 Devuelve un iterator al comienzo de la lista de areas de almacenamiento de esta base de datos.
100 \return Un iterator al comienzo de la lista de areas de almacenamiento de esta base de datos.
102 const_storage_iterator storage_begin() const throw() { return a_storageAreas.begin(); }
105 Devuelve un iterator al final de la lista de areas de almacenamiento de esta base de datos.
106 \return Un iterator al final de la lista de areas de almacenamiento de esta base de datos.
108 const_storage_iterator storage_end() const throw() { return a_storageAreas.end(); }
111 Devuelve el objeto sobre el que esta posicionado el iterator recibido como parametro.
112 \param ii Iterator que deberia estar comprendido entre #const_storage_begin y #const_storage_end.
113 \return El objeto sobre el que esta posicionado el iterator recibido como parametro.
115 static const StorageArea* storageArea(const_storage_iterator& ii) throw() { return ii->second; }
118 Devuelve un documento XML con la informacion referente a esta instancia.
119 \param parent Nodo XML del que dependende la informacion.
120 @return un documento XML con la informacion referente a esta instancia.
122 xml::Node* asXML(xml::Node* parent) const throw();
126 Devuelve un iterator al comienzo de la lista de areas de almacenamiento de esta base de datos.
127 \return Un iterator al comienzo de la lista de areas de almacenamiento de esta base de datos.
129 storage_iterator storage_begin() throw() { return a_storageAreas.begin(); }
132 Devuelve un iterator al final de la lista de areas de almacenamiento de esta base de datos.
133 \return Un iterator al final de la lista de areas de almacenamiento de esta base de datos.
135 storage_iterator storage_end() throw() { return a_storageAreas.end(); }
138 Devuelve el objeto sobre el que esta posicionado el iterator recibido como parametro.
139 \param ii Iterator que deberia estar comprendido entre #const_storage_begin y #const_storage_end.
140 \return El objeto sobre el que esta posicionado el iterator recibido como parametro.
142 static StorageArea* storageArea(storage_iterator& ii) throw() { return ii->second; }
146 container a_storageAreas;
148 Repository(const Repository&);