12910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner/*
2fd4c0076b7470f5962ff462bae9cd9f208e059b7David Turner * QList Module
32910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner *
42910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * Copyright (C) 2009 Red Hat Inc.
52910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner *
62910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * Authors:
72910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner *  Luiz Capitulino <lcapitulino@redhat.com>
82910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner *
9fd4c0076b7470f5962ff462bae9cd9f208e059b7David Turner * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10fd4c0076b7470f5962ff462bae9cd9f208e059b7David Turner * See the COPYING.LIB file in the top-level directory.
112910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner */
12fd4c0076b7470f5962ff462bae9cd9f208e059b7David Turner
132910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#ifndef QLIST_H
142910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define QLIST_H
152910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
162910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include "qobject.h"
172910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include "qemu-queue.h"
182910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include "qemu-common.h"
192910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
202910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnertypedef struct QListEntry {
212910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner    QObject *value;
222910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner    QTAILQ_ENTRY(QListEntry) next;
232910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner} QListEntry;
242910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
252910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnertypedef struct QList {
262910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner    QObject_HEAD;
272910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner    QTAILQ_HEAD(,QListEntry) head;
282910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner} QList;
292910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
302910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define qlist_append(qlist, obj) \
312910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner        qlist_append_obj(qlist, QOBJECT(obj))
322910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
332910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define QLIST_FOREACH_ENTRY(qlist, var)             \
342910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner        for ((var) = ((qlist)->head.tqh_first);     \
352910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner            (var);                                  \
362910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner            (var) = ((var)->next.tqe_next))
372910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
382910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnerstatic inline QObject *qlist_entry_obj(const QListEntry *entry)
392910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner{
402910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner    return entry->value;
412910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner}
422910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
432910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' TurnerQList *qlist_new(void);
442910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' TurnerQList *qlist_copy(QList *src);
452910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnervoid qlist_append_obj(QList *qlist, QObject *obj);
462910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnervoid qlist_iter(const QList *qlist,
472910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner                void (*iter)(QObject *obj, void *opaque), void *opaque);
482910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' TurnerQObject *qlist_pop(QList *qlist);
492910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' TurnerQObject *qlist_peek(QList *qlist);
502910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnerint qlist_empty(const QList *qlist);
512910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' TurnerQList *qobject_to_qlist(const QObject *obj);
522910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner
532910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#endif /* QLIST_H */
54