X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbos%2FCrossedLoader.hpp;fp=include%2Fanna%2Fdbos%2FCrossedLoader.hpp;h=c1516ec8cadb2966259d7944e26507d458b34b48;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/include/anna/dbos/CrossedLoader.hpp b/include/anna/dbos/CrossedLoader.hpp new file mode 100644 index 0000000..c1516ec --- /dev/null +++ b/include/anna/dbos/CrossedLoader.hpp @@ -0,0 +1,97 @@ +// 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_CrossedLoader_hpp +#define anna_dbos_CrossedLoader_hpp + +#include + +namespace anna { + +namespace dbms { +class Database; +} + +namespace dbos { + +class Loader; + +/** + * Interfaz que deben cumplir los cargadores cruzados. Un cargador cruzado facilita que una + * misma clase pueda ser cargada usando varios criterios de búsqueda. + * + * El criterio de búsqueda más usado y que debería ser más óptimo será desarrollado + * mediante la definición del anna::dbos::Loader específico. El resto de criterios de búsqueda, + * los cargadores cruzados, deberían ser capaces obtener los datos usados como clave en el criterio + * principal, para a partir de ahí poder aplicar el criterio de búsqueda principal. + * + * Cada cargador cruzado podría tener una lista de pares (clave_alternativa, clave_principal) que permitirá + * acelerar las búsquedas de la clave principal, en base a la clave alternativa usada en este cargador. + * + * Para obtener los datos de la clave principal en base a los datos de la clave alternativa habrá que + * acceder al medio físico. + * + * Para optimizar el acceso a los pares (Clave alternativa, Clave Principal) se podría usar una + * instancia del tipo anna::LRUMap. +*/ +class CrossedLoader : 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::CrossedLoader"; } + +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. + */ + CrossedLoader(dbms::Database& database, const Id id = 0) : Accesor(database, id) {;} + + /** + 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. + \param emode Modo de actuar en caso de no encontrar el dato buscado. + */ + CrossedLoader(dbms::Database& database, const Id id, const Exception::Mode::_v emode) : Accesor(database, id, emode) {;} + + /** + Este método debe ser reescrito para que permita localizar la información del objeto, que posiblemente + esté ubicado en la lista de objetos de este cargador cruzado. + + @return \em true si se ha localizado la información la clave primaria del objeto en su lista de pares + o \em false en otro caso. + */ + virtual bool seek() const throw() { return false; } + + /** + * Este método debe ser reescrito para que se pueda actualizar la lista de pares (clave_alternativa, clave_principal) + * que permitirá acelear las posteriores búsquedas. + * + * \param loader Instancia del cargador principal que habrá compuesto la clave principal con los suministrados por + * esta instancia. + */ + virtual void download(Loader& loader) throw() {;} + + friend class StorageArea; +}; + +} +} + +#endif + + +