+++ /dev/null
-// ANNA - Anna is Not Nothingness Anymore //
-// //
-// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
-// //
-// See project site at http://redmine.teslayout.com/projects/anna-suite //
-// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
-
-
-#ifndef anna_dbos_Repository_hpp
-#define anna_dbos_Repository_hpp
-
-#include <vector>
-
-#include <anna/core/mt/Mutex.hpp>
-
-#include <anna/dbos/StorageArea.hpp>
-#include <anna/dbos/defines.hpp>
-
-namespace anna {
-
-namespace xml {
-class Node;
-}
-
-namespace comm {
-class INetAddress;
-class Delivery;
-}
-
-namespace dbms {
-class Connection;
-}
-
-namespace dbos {
-
-/**
- Clase que modela la interaccion entre la base y nuestra aplicacion.
-*/
-class Repository : public Mutex {
-public:
- typedef std::map <StorageId, StorageArea*> container;
- typedef container::const_iterator const_storage_iterator; /**<Iterador para acceder a las areas de almacenamiento de esta base de datos */
- typedef container::iterator storage_iterator; /**<Iterador para acceder a las areas de almacenamiento de esta base de datos */
-
- /**
- Constructor.
- \param name Nombre logico del repositorio de areas de almacenamiento.
- */
- explicit Repository(const char* name);
-
- /**
- Constructor.
- \param name Nombre logico del repositorio de areas de almacenamiento.
- */
- explicit Repository(const std::string& name);
-
- /**
- Crea una nueva area de almacenamiento para objetos cargados a partir de un medio fisico, normalmente
- la base de datos.
-
- El tipo de dato de esta nueva area vendria definida implicitamente por el tipo de factoria empleadas
- para instanciar y/o liberar los objetos y sus respectivos registros.
-
- \param index Clave que seria usada para localizar el area de almacenamiento.
- \param name Nombre logico de la nueva area de almacenamiento.
- \param maxSize Limita el numero maximo de objetos que pueden estar cargados simultanemante en memoria.
- Si se alcanza este limite pero no hay ningun objeto susceptible de ser sacado de la memoria de almacenamiento
- se ampliaria automaticamente la reserva de memoria necesaria para cargar nuevos objetos, en tanto en cuanto
- no se libere alguno de los objetos cargados. Ver StorageArea::StandardSize.
- \param objectAllocator actoria de objetos usada para crear las nuevas instancias en este area de
- almacenamiento.
- \param errorCode Cdigo de error asociado a la excepcin lanzada por el metodo StorageArea::instantiate
- en caso de que no se encuentre el objeto buscado. Si vale StorageArea::NoExceptionWhenNotFound en
- caso de no encontrar el objeto no se devolveriaexcepcin y el valor retornado seria NULL.
- \param aamm Modo de acceso de este area de almacenamiento.
-
- \warning Las dos actorias deben estar disponibles desde el momento de invocar a este metodo hasta la
- finalizacin de esta instancia de base de datos.
- */
- StorageArea* createStorageArea(const StorageId index, const char* name, const Size maxSize, ObjectAllocator objectAllocator, const int errorCode, const StorageArea::AccessMode::_v aamm = StorageArea::AccessMode::ReadOnly)
- throw(RuntimeException);
-
- /**
- Devuelve la instancia del area de almacenamiento asociada al indice recibido.
-
- \param index Indice del area de almacenamiento.
-
- \return La instancia del area de almacenamiento asociada al indice recibido. Puede ser NULL si el
- indice no fue usado para crear un area mediate #createStorageArea.
- */
- StorageArea* findStorageArea(const StorageId index) throw();
-
- /**
- Elimina todos los objetos cargados en las areas de almacenamiento definidas.
- */
- void clear() throw(RuntimeException);
-
- /**
- Devuelve un iterator al comienzo de la lista de areas de almacenamiento de esta base de datos.
- \return Un iterator al comienzo de la lista de areas de almacenamiento de esta base de datos.
- */
- const_storage_iterator storage_begin() const throw() { return a_storageAreas.begin(); }
-
- /**
- Devuelve un iterator al final de la lista de areas de almacenamiento de esta base de datos.
- \return Un iterator al final de la lista de areas de almacenamiento de esta base de datos.
- */
- const_storage_iterator storage_end() const throw() { return a_storageAreas.end(); }
-
- /**
- Devuelve el objeto sobre el que esta posicionado el iterator recibido como parametro.
- \param ii Iterator que deberia estar comprendido entre #const_storage_begin y #const_storage_end.
- \return El objeto sobre el que esta posicionado el iterator recibido como parametro.
- */
- static const StorageArea* storageArea(const_storage_iterator& ii) throw() { return ii->second; }
-
- /**
- Devuelve un documento XML con la informacion referente a esta instancia.
- \param parent Nodo XML del que dependende la informacion.
- @return un documento XML con la informacion referente a esta instancia.
- */
- xml::Node* asXML(xml::Node* parent) const throw();
-
-protected:
- /**
- Devuelve un iterator al comienzo de la lista de areas de almacenamiento de esta base de datos.
- \return Un iterator al comienzo de la lista de areas de almacenamiento de esta base de datos.
- */
- storage_iterator storage_begin() throw() { return a_storageAreas.begin(); }
-
- /**
- Devuelve un iterator al final de la lista de areas de almacenamiento de esta base de datos.
- \return Un iterator al final de la lista de areas de almacenamiento de esta base de datos.
- */
- storage_iterator storage_end() throw() { return a_storageAreas.end(); }
-
- /**
- Devuelve el objeto sobre el que esta posicionado el iterator recibido como parametro.
- \param ii Iterator que deberia estar comprendido entre #const_storage_begin y #const_storage_end.
- \return El objeto sobre el que esta posicionado el iterator recibido como parametro.
- */
- static StorageArea* storageArea(storage_iterator& ii) throw() { return ii->second; }
-
-private:
- std::string a_name;
- container a_storageAreas;
-
- Repository(const Repository&);
-};
-
-}
-}
-
-#endif