From f7e6b1927f00631b1a2bf59e597ea4640dbddb31 Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Wed, 11 Nov 2009 10:37:39 -0600 Subject: [PATCH] Add a QBool type Signed-off-by: Anthony Liguori --- Makefile | 2 +- qbool.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ qbool.h | 29 +++++++++++++++++++++ qobject.h | 1 + 4 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 qbool.c create mode 100644 qbool.h diff --git a/Makefile b/Makefile index d47c5a5355..26f6572dac 100644 --- a/Makefile +++ b/Makefile @@ -137,7 +137,7 @@ obj-y += buffered_file.o migration.o migration-tcp.o qemu-sockets.o obj-y += qemu-char.o aio.o savevm.o obj-y += msmouse.o ps2.o obj-y += qdev.o qdev-properties.o -obj-y += qint.o qstring.o qdict.o qlist.o qfloat.o +obj-y += qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o obj-y += qemu-config.o block-migration.o obj-$(CONFIG_BRLAPI) += baum.o diff --git a/qbool.c b/qbool.c new file mode 100644 index 0000000000..5ab734c2c7 --- /dev/null +++ b/qbool.c @@ -0,0 +1,76 @@ +/* + * QBool Module + * + * Copyright (C) 2009 Red Hat Inc. + * + * Authors: + * Luiz Capitulino + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + * Copyright IBM, Corp. 2009 + * + * Authors: + * Anthony Liguori + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + * + */ + +#include "qbool.h" +#include "qobject.h" +#include "qemu-common.h" + +static void qbool_destroy_obj(QObject *obj); + +static const QType qbool_type = { + .code = QTYPE_QBOOL, + .destroy = qbool_destroy_obj, +}; + +/** + * qbool_from_int(): Create a new QBool from an int + * + * Return strong reference. + */ +QBool *qbool_from_int(int value) +{ + QBool *qb; + + qb = qemu_malloc(sizeof(*qb)); + qb->value = value; + QOBJECT_INIT(qb, &qbool_type); + + return qb; +} + +/** + * qbool_get_int(): Get the stored int + */ +int qbool_get_int(const QBool *qb) +{ + return qb->value; +} + +/** + * qobject_to_qbool(): Convert a QObject into a QBool + */ +QBool *qobject_to_qbool(const QObject *obj) +{ + if (qobject_type(obj) != QTYPE_QBOOL) + return NULL; + + return container_of(obj, QBool, base); +} + +/** + * qbool_destroy_obj(): Free all memory allocated by a + * QBool object + */ +static void qbool_destroy_obj(QObject *obj) +{ + assert(obj != NULL); + qemu_free(qobject_to_qbool(obj)); +} diff --git a/qbool.h b/qbool.h new file mode 100644 index 0000000000..fe66fcd455 --- /dev/null +++ b/qbool.h @@ -0,0 +1,29 @@ +/* + * QBool Module + * + * Copyright IBM, Corp. 2009 + * + * Authors: + * Anthony Liguori + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + * + */ + +#ifndef QBOOL_H +#define QBOOL_H + +#include +#include "qobject.h" + +typedef struct QBool { + QObject_HEAD; + int value; +} QBool; + +QBool *qbool_from_int(int value); +int qbool_get_int(const QBool *qb); +QBool *qobject_to_qbool(const QObject *obj); + +#endif /* QBOOL_H */ diff --git a/qobject.h b/qobject.h index 67b03d089c..2270ec1d73 100644 --- a/qobject.h +++ b/qobject.h @@ -42,6 +42,7 @@ typedef enum { QTYPE_QDICT, QTYPE_QLIST, QTYPE_QFLOAT, + QTYPE_QBOOL, } qtype_code; struct QObject;