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