File:  [Qemu by Fabrice Bellard] / qemu / qlist.h
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 18:56:17 2018 UTC (3 years, 1 month ago) by root
Branches: qemu, MAIN
CVS tags: qemu1101, qemu1001, qemu1000, qemu0151, HEAD
qemu 0.15.1

    1: /*
    2:  * QList Module
    3:  *
    4:  * Copyright (C) 2009 Red Hat Inc.
    5:  *
    6:  * Authors:
    7:  *  Luiz Capitulino <lcapitulino@redhat.com>
    8:  *
    9:  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
   10:  * See the COPYING.LIB file in the top-level directory.
   11:  */
   12: 
   13: #ifndef QLIST_H
   14: #define QLIST_H
   15: 
   16: #include "qobject.h"
   17: #include "qemu-queue.h"
   18: #include "qemu-common.h"
   19: #include "qemu-queue.h"
   20: 
   21: typedef struct QListEntry {
   22:     QObject *value;
   23:     QTAILQ_ENTRY(QListEntry) next;
   24: } QListEntry;
   25: 
   26: typedef struct QList {
   27:     QObject_HEAD;
   28:     QTAILQ_HEAD(,QListEntry) head;
   29: } QList;
   30: 
   31: #define qlist_append(qlist, obj) \
   32:         qlist_append_obj(qlist, QOBJECT(obj))
   33: 
   34: #define QLIST_FOREACH_ENTRY(qlist, var)             \
   35:         for ((var) = ((qlist)->head.tqh_first);     \
   36:             (var);                                  \
   37:             (var) = ((var)->next.tqe_next))
   38: 
   39: static inline QObject *qlist_entry_obj(const QListEntry *entry)
   40: {
   41:     return entry->value;
   42: }
   43: 
   44: QList *qlist_new(void);
   45: QList *qlist_copy(QList *src);
   46: void qlist_append_obj(QList *qlist, QObject *obj);
   47: void qlist_iter(const QList *qlist,
   48:                 void (*iter)(QObject *obj, void *opaque), void *opaque);
   49: QObject *qlist_pop(QList *qlist);
   50: QObject *qlist_peek(QList *qlist);
   51: int qlist_empty(const QList *qlist);
   52: QList *qobject_to_qlist(const QObject *obj);
   53: 
   54: static inline const QListEntry *qlist_first(const QList *qlist)
   55: {
   56:     return QTAILQ_FIRST(&qlist->head);
   57: }
   58: 
   59: static inline const QListEntry *qlist_next(const QListEntry *entry)
   60: {
   61:     return QTAILQ_NEXT(entry, next);
   62: }
   63: 
   64: #endif /* QLIST_H */

unix.superglobalmegacorp.com