Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbms / Float.hpp
diff --git a/include/anna/dbms/Float.hpp b/include/anna/dbms/Float.hpp
new file mode 100644 (file)
index 0000000..427668e
--- /dev/null
@@ -0,0 +1,115 @@
+// 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_dbms_Float_hpp
+#define anna_dbms_Float_hpp
+
+#include <anna/core/RuntimeException.hpp>
+
+#include <anna/dbms/Data.hpp>
+
+namespace anna {
+
+namespace dbms {
+
+/**
+   Numero en coma flotante usado como entrada y/o salida de las sentencias SQL.
+*/
+class Float : public Data {
+public:
+  /**
+     Constructor.
+     \param isNulleable Indica si el dato puede tomar valores nulos.
+     \para format Indica el indicador de formato para pasar de cadena a numero. Usa la misma nomenclatura
+     que printf, scanf, etc. Su uso dependerá del gestor de base de datos usado.
+  */
+  explicit Float(const bool isNulleable = false, const char* format = "%f") :
+    Data(Type::Float, sizeof(float), isNulleable),
+    a_format(format),
+    a_value(0.0) {
+    Data::setBuffer(&a_value);
+  }
+
+  /**
+     Constructor copia.
+     \param other Instancia de la que copiar.
+  */
+  Float(const Float& other) : Data(other), a_value(other.a_value), a_format(other.a_format) {
+    Data::setBuffer(&a_value);
+  }
+
+  /**
+   * Metodo obsoleto, debería usar #getValue.
+     Devuelve el contenido del campo de tipo Float.
+     \return el contenido del campo de tipo Float.
+     \warning Si el metodo Data::isNull devolvio \em true el resultado de este metodo no esta definido.
+  */
+  //float getFloatValue () const throw () { return getValue (); }
+
+  /**
+   * Devuelve el valor asociado a este campo.
+   * \return Devuelve el valor asociado a este campo.
+   */
+  float getValue() const throw() { return a_value; }
+
+  /**
+   * Devuelve el formato que indica la forma en la que el número será representado sobre
+   * una cadena, en caso de que fuera necesario.
+   */
+  const char* getFormat() const throw() { return a_format; }
+
+  /**
+     Operador de copia.
+     \param other Float del que copiar.
+     \return La instancia de esta cadena.
+  */
+  Float& operator = (const Float& other) throw(RuntimeException) {
+    if(this != &other) {
+      setNull(other.isNull());
+      a_value = other.a_value;
+    }
+
+    return *this;
+  }
+
+  /**
+     Operador de asignacion.
+     \param value Float del que copiar.
+     \return La instancia de esta cadena.
+  */
+  Float& operator = (const float value) throw(RuntimeException) {
+    a_value = value;
+    setNull(false);
+    return *this;
+  }
+
+  /**
+     Operador de conversion.
+     \warning Si la columna asociada tiene un valor NULL, devolvera 0.0.
+     \return El contenido de esta cadena.
+  */
+  operator float() const throw() { return getValue(); }
+
+  /**
+     Devuelve una cadena con la informacion referente a esta instancia.
+     \return Una cadena con la informacion referente a esta instancia.
+  */
+  std::string asString() const throw();
+
+private:
+  float a_value;
+  const char* a_format;
+
+  void do_clear() throw() { a_value = 0.0; }
+};
+
+}
+}
+
+#endif
+