qint.c 1.2 KB
Newer Older
Luiz Capitulino's avatar
Luiz Capitulino committed
1
/*
Luiz Capitulino's avatar
Luiz Capitulino committed
2
 * QInt Module
Luiz Capitulino's avatar
Luiz Capitulino committed
3 4 5 6 7 8
 *
 * Copyright (C) 2009 Red Hat Inc.
 *
 * Authors:
 *  Luiz Capitulino <lcapitulino@redhat.com>
 *
Luiz Capitulino's avatar
Luiz Capitulino committed
9 10
 * 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.
Luiz Capitulino's avatar
Luiz Capitulino committed
11
 */
Luiz Capitulino's avatar
Luiz Capitulino committed
12

Luiz Capitulino's avatar
Luiz Capitulino committed
13 14 15 16
#include "qint.h"
#include "qobject.h"
#include "qemu-common.h"

17 18 19 20 21 22
static void qint_destroy_obj(QObject *obj);

static const QType qint_type = {
    .code = QTYPE_QINT,
    .destroy = qint_destroy_obj,
};
Luiz Capitulino's avatar
Luiz Capitulino committed
23 24 25 26 27 28 29 30 31 32

/**
 * qint_from_int(): Create a new QInt from an int64_t
 *
 * Return strong reference.
 */
QInt *qint_from_int(int64_t value)
{
    QInt *qi;

33
    qi = g_malloc(sizeof(*qi));
Luiz Capitulino's avatar
Luiz Capitulino committed
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
    qi->value = value;
    QOBJECT_INIT(qi, &qint_type);

    return qi;
}

/**
 * qint_get_int(): Get the stored integer
 */
int64_t qint_get_int(const QInt *qi)
{
    return qi->value;
}

/**
 * qobject_to_qint(): Convert a QObject into a QInt
 */
QInt *qobject_to_qint(const QObject *obj)
{
    if (qobject_type(obj) != QTYPE_QINT)
        return NULL;

    return container_of(obj, QInt, base);
}

/**
 * qint_destroy_obj(): Free all memory allocated by a
 * QInt object
 */
static void qint_destroy_obj(QObject *obj)
{
    assert(obj != NULL);
66
    g_free(qobject_to_qint(obj));
Luiz Capitulino's avatar
Luiz Capitulino committed
67
}