095e25eaec8d218915c1e9cab7cee5d042cd5326
[anna.git] / Float.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_dbms_Float_hpp
10 #define anna_dbms_Float_hpp
11
12 #include <anna/core/RuntimeException.hpp>
13
14 #include <anna/dbms/Data.hpp>
15
16 namespace anna {
17
18 namespace dbms {
19
20 /**
21    Numero en coma flotante usado como entrada y/o salida de las sentencias SQL.
22 */
23 class Float : public Data {
24 public:
25   /**
26      Constructor.
27      \param isNulleable Indica si el dato puede tomar valores nulos.
28      \para format Indica el indicador de formato para pasar de cadena a numero. Usa la misma nomenclatura
29      que printf, scanf, etc. Su uso dependerá del gestor de base de datos usado.
30   */
31   explicit Float(const bool isNulleable = false, const char* format = "%f") :
32     Data(Type::Float, sizeof(float), isNulleable),
33     a_format(format),
34     a_value(0.0) {
35     Data::setBuffer(&a_value);
36   }
37
38   /**
39      Constructor copia.
40      \param other Instancia de la que copiar.
41   */
42   Float(const Float& other) : Data(other), a_value(other.a_value), a_format(other.a_format) {
43     Data::setBuffer(&a_value);
44   }
45
46   /**
47    * Metodo obsoleto, debería usar #getValue.
48      Devuelve el contenido del campo de tipo Float.
49      \return el contenido del campo de tipo Float.
50      \warning Si el metodo Data::isNull devolvio \em true el resultado de este metodo no esta definido.
51   */
52   //float getFloatValue () const { return getValue (); }
53
54   /**
55    * Devuelve el valor asociado a este campo.
56    * \return Devuelve el valor asociado a este campo.
57    */
58   float getValue() const { return a_value; }
59
60   /**
61    * Devuelve el formato que indica la forma en la que el número será representado sobre
62    * una cadena, en caso de que fuera necesario.
63    */
64   const char* getFormat() const { return a_format; }
65
66   /**
67      Operador de copia.
68      \param other Float del que copiar.
69      \return La instancia de esta cadena.
70   */
71   Float& operator = (const Float& other) noexcept(false) {
72     if(this != &other) {
73       setNull(other.isNull());
74       a_value = other.a_value;
75     }
76
77     return *this;
78   }
79
80   /**
81      Operador de asignacion.
82      \param value Float del que copiar.
83      \return La instancia de esta cadena.
84   */
85   Float& operator = (const float value) noexcept(false) {
86     a_value = value;
87     setNull(false);
88     return *this;
89   }
90
91   /**
92      Operador de conversion.
93      \warning Si la columna asociada tiene un valor NULL, devolvera 0.0.
94      \return El contenido de esta cadena.
95   */
96   operator float() const { return getValue(); }
97
98   /**
99      Devuelve una cadena con la informacion referente a esta instancia.
100      \return Una cadena con la informacion referente a esta instancia.
101   */
102   std::string asString() const ;
103
104 private:
105   float a_value;
106   const char* a_format;
107
108   void do_clear() { a_value = 0.0; }
109 };
110
111 }
112 }
113
114 #endif
115