Remove operation help.
[anna.git] / include / anna / dbos / Loader.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
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 //
7
8
9 #ifndef anna_dbos_Loader_hpp
10 #define anna_dbos_Loader_hpp
11
12 #include <anna/dbos/Accesor.hpp>
13
14 namespace anna {
15
16 namespace dbms {
17 class Database;
18 }
19
20 namespace dbos {
21
22 class CrossedLoader;
23
24 /**
25    Interfaz que deben cumplir los objetos encargados de cargar el objeto desde el medio fisico,
26    que normalmente sera alguna base de datos, y pasarlo un ambito de objetos en C++.
27 */
28 class Loader : public Accesor {
29 public:
30   /**
31      Metodo de debemos re-escribir para devolver el nombre completo del selector de recursos.
32      Para evitar ambigüedades este nombre deberia incluir la lista completa de \em namespaces
33      a la que pertenece la clase.
34      \return Una cadena con el nombre de este selector.
35   */
36   virtual const char* getClassName() const throw() { return "anna::dbos::Loader"; }
37
38 protected:
39   /**
40      Constructor.
41      \param database Base de datos asociada a este cargador y que deberia servir para
42      obtener los datos de un objeto. Debe tener la misma disponibilidad que este cargador.
43      \param id Identificador de este accesor.
44   */
45   Loader(dbms::Database& database, const Id id = 0) : Accesor(database, id) {;}
46
47   /**
48      Constructor.
49      \param id Identificador de este accesor.
50   */
51   Loader(const Id id = 0) : Accesor(id) {;}
52
53   /**
54      Devuelve el indice usado para ubicar en memoria el objeto que vamos a cargar.
55      @return El indice usado para ubicar en memoria el objeto que vamos a cargar.
56   */
57   virtual Index getIndex() const throw(RuntimeException) = 0;
58
59   /**
60    * Este método debe ser reescrito para poder obtener los datos de la clave principal usada para localizar
61    * los objetos en un área del almacenamiento.
62    *
63    * \param crossedLoader Instancia del cargador alternativo que habrá calculado la clave principal en
64    * a lo clave alternativa contenida en él.
65    */
66   virtual void upload(CrossedLoader& crossedLoader) throw(RuntimeException) {;}
67
68   friend class StorageArea;
69 };
70
71 }
72 }
73
74 #endif
75
76
77