+++ /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_CrossedLoader_hpp
-#define anna_dbos_CrossedLoader_hpp
-
-#include <anna/dbos/Accesor.hpp>
-
-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
-
-
-