Home | History | Annotate | Download | only in qemu
      1 /*
      2  * QFloat Module
      3  *
      4  * Copyright IBM, Corp. 2009
      5  *
      6  * Authors:
      7  *  Anthony Liguori   <aliguori (at) us.ibm.com>
      8  *
      9  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
     10  * See the COPYING.LIB file in the top-level directory.
     11  *
     12  */
     13 
     14 #include "qfloat.h"
     15 #include "qobject.h"
     16 #include "qemu-common.h"
     17 
     18 static void qfloat_destroy_obj(QObject *obj);
     19 
     20 static const QType qfloat_type = {
     21     .code = QTYPE_QFLOAT,
     22     .destroy = qfloat_destroy_obj,
     23 };
     24 
     25 /**
     26  * qfloat_from_int(): Create a new QFloat from a float
     27  *
     28  * Return strong reference.
     29  */
     30 QFloat *qfloat_from_double(double value)
     31 {
     32     QFloat *qf;
     33 
     34     qf = qemu_malloc(sizeof(*qf));
     35     qf->value = value;
     36     QOBJECT_INIT(qf, &qfloat_type);
     37 
     38     return qf;
     39 }
     40 
     41 /**
     42  * qfloat_get_double(): Get the stored float
     43  */
     44 double qfloat_get_double(const QFloat *qf)
     45 {
     46     return qf->value;
     47 }
     48 
     49 /**
     50  * qobject_to_qfloat(): Convert a QObject into a QFloat
     51  */
     52 QFloat *qobject_to_qfloat(const QObject *obj)
     53 {
     54     if (qobject_type(obj) != QTYPE_QFLOAT)
     55         return NULL;
     56 
     57     return container_of(obj, QFloat, base);
     58 }
     59 
     60 /**
     61  * qfloat_destroy_obj(): Free all memory allocated by a
     62  * QFloat object
     63  */
     64 static void qfloat_destroy_obj(QObject *obj)
     65 {
     66     assert(obj != NULL);
     67     qemu_free(qobject_to_qfloat(obj));
     68 }
     69