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