X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbos%2FLoader.hpp;fp=include%2Fanna%2Fdbos%2FLoader.hpp;h=ec71709ce7c6d9bd6afd9aef08978e97c3e5e599;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/include/anna/dbos/Loader.hpp b/include/anna/dbos/Loader.hpp new file mode 100644 index 0000000..ec71709 --- /dev/null +++ b/include/anna/dbos/Loader.hpp @@ -0,0 +1,77 @@ +// 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_Loader_hpp +#define anna_dbos_Loader_hpp + +#include + +namespace anna { + +namespace dbms { +class Database; +} + +namespace dbos { + +class CrossedLoader; + +/** + Interfaz que deben cumplir los objetos encargados de cargar el objeto desde el medio fisico, + que normalmente sera alguna base de datos, y pasarlo un ambito de objetos en C++. +*/ +class Loader : public Accesor { +public: + /** + Metodo de debemos re-escribir para devolver el nombre completo del selector de recursos. + Para evitar ambigüedades este nombre deberia incluir la lista completa de \em namespaces + a la que pertenece la clase. + \return Una cadena con el nombre de este selector. + */ + virtual const char* getClassName() const throw() { return "anna::dbos::Loader"; } + +protected: + /** + Constructor. + \param database Base de datos asociada a este cargador y que deberia servir para + obtener los datos de un objeto. Debe tener la misma disponibilidad que este cargador. + \param id Identificador de este accesor. + */ + Loader(dbms::Database& database, const Id id = 0) : Accesor(database, id) {;} + + /** + Constructor. + \param id Identificador de este accesor. + */ + Loader(const Id id = 0) : Accesor(id) {;} + + /** + Devuelve el indice usado para ubicar en memoria el objeto que vamos a cargar. + @return El indice usado para ubicar en memoria el objeto que vamos a cargar. + */ + virtual Index getIndex() const throw(RuntimeException) = 0; + + /** + * Este método debe ser reescrito para poder obtener los datos de la clave principal usada para localizar + * los objetos en un área del almacenamiento. + * + * \param crossedLoader Instancia del cargador alternativo que habrá calculado la clave principal en + * a lo clave alternativa contenida en él. + */ + virtual void upload(CrossedLoader& crossedLoader) throw(RuntimeException) {;} + + friend class StorageArea; +}; + +} +} + +#endif + + +