--- /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_SetFacade_hpp
+#define anna_dbos_SetFacade_hpp
+
+#include <vector>
+
+#include <anna/dbos/Set.hpp>
+#include <anna/dbos/ObjectFacade.hpp>
+
+namespace anna {
+
+namespace dbos {
+
+/**
+ Clase que facilita el acceso y uso de las clases encargadas de la instanciacion de multiples objetos a partir de los
+ datos contenidos en un medio fisico, que normalmente seria la tabla de una base de datos.
+
+ Esta nos facilita el manejo de instancias multiples, es decir, para una condicion de carga dada hay varios registros
+ o elementos del medio fisico que la cumplen.
+
+ La clase \em T debe tener definidos los siquientes metodos:
+ \li anna::dbos::Object::instantiate: Interpreta la informacin la del medio fisico para adecuarla a
+ la clase C++.
+ \li void destroy () throw (): Libera los recursos reservados por este objeto
+
+ \see dbos_declare_set
+ \see dbos_prepare_set
+*/
+template <typename T> class SetFacade : public ObjectFacade < Set <T> > {
+public:
+ typedef typename Set<T>::iterator iterator;
+ typedef typename Set<T>::const_iterator const_iterator;
+
+ /**
+ Devuelve el numero de elementos contenidos en el conjunto recibido como parametro.
+ Se puede usar sin tener que preocuparse por
+ el valor de la instancia del conjunto, ya que si este es NULL devolveria 0.
+ \param t Instancia del conjunto.
+ \return El numero de elementos que contiene el conjunto.
+ */
+ static int size(Set<T>* t) throw() { return (t == NULL) ? 0 : t->size(); }
+
+ /**
+ Iterator al primer elemento del conjunto. Se puede usar sin tener que preocuparse por
+ el valor de la instancia del conjunto, ya que si este es NULL devolveria 0.
+ \return Un iterador del primer elemento del conjunto.
+ */
+ static iterator begin(Set<T>* t) throw() {
+ return (t == NULL) ? iterator(0) : t->begin();
+ }
+
+ /**
+ Iterator al ultimo elemento del conjunto. Se puede usar sin tener que preocuparse por
+ el valor de la instancia del conjunto, ya que si este es NULL devolveria 0.
+ \return Un iterador del primer elemento del conjunto.
+ */
+ static iterator end(Set<T>* t) throw() {
+ return (t == NULL) ? iterator(0) : t->end();
+ }
+
+ /**
+ Iterator al primer elemento del conjunto. Se puede usar sin tener que preocuparse por
+ el valor de la instancia del conjunto, ya que si este es NULL devolveria 0.
+ \return Un iterador del primer elemento del conjunto.
+ */
+ static const_iterator begin(const Set<T>* t) throw() {
+ return (t == NULL) ? const_iterator(0) : t->begin();
+ }
+
+ /**
+ Iterator al ultimo elemento del conjunto. Se puede usar sin tener que preocuparse por
+ el valor de la instancia del conjunto, ya que si este es NULL devolveria 0.
+ \return Un iterador del primer elemento del conjunto.
+ */
+ static const_iterator end(const Set<T>* t) throw() {
+ return (t == NULL) ? const_iterator(0) : t->end();
+ }
+ /**
+ Devuelve el objeto referenciado por el iterator recibido como parametro.
+ \return El objeto referenciado por el iterator recibido como parametro.
+ */
+ static T* data(iterator ii) throw() { return Set<T>::data(ii); }
+
+ /**
+ Devuelve el objeto referenciado por el iterator recibido como parametro.
+ \return El objeto referenciado por el iterator recibido como parametro.
+ */
+ static const T* data(const_iterator ii) throw() { return Set<T>::data(ii); }
+
+protected:
+ /**
+ Contructor.
+ */
+ SetFacade() {}
+};
+
+/**
+ Definicion a la que hay que invocar en la implementacion de la clase que hereda
+ de anna::dbos::SetFacade.
+
+ \param T Nombre de la clase que vamos a tratar en el ambito de C++.
+*/
+#define dbos_prepare_set(T) \
+ template <> anna::dbos::StorageArea* anna::dbos::ObjectFacade < anna::dbos::Set <T> >::st_storageArea = NULL
+
+/**
+ Definicion a la que hay que invocar dentro de la definicion de la clase que hereda
+ de anna::dbos::SetFacade.
+
+ \param T Nombre de la clase que vamos a tratar en el ambito de C++.
+*/
+#define dbos_declare_set(T) \
+ friend class anna::Allocator<T>; \
+ friend class anna::dbos::Set <T>
+
+}
+}
+
+#endif