Rizin
unix-like reverse engineering framework and cli tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Friends Macros Modules Pages
qr.h File Reference

Go to the source code of this file.

Macros

#define qr(a_type)
 
#define qr_new(a_qr, a_field)
 
#define qr_next(a_qr, a_field)   ((a_qr)->a_field.qre_next)
 
#define qr_prev(a_qr, a_field)   ((a_qr)->a_field.qre_prev)
 
#define qr_before_insert(a_qrelm, a_qr, a_field)
 
#define qr_after_insert(a_qrelm, a_qr, a_field)
 
#define qr_meld(a_qr_a, a_qr_b, a_field)
 
#define qr_split(a_qr_a, a_qr_b, a_field)    qr_meld((a_qr_a), (a_qr_b), a_field)
 
#define qr_remove(a_qr, a_field)
 
#define qr_foreach(var, a_qr, a_field)
 
#define qr_reverse_foreach(var, a_qr, a_field)
 

Macro Definition Documentation

◆ qr

#define qr (   a_type)
Value:
struct { \
a_type *qre_next; \
a_type *qre_prev; \
}

Definition at line 2 of file qr.h.

◆ qr_after_insert

#define qr_after_insert (   a_qrelm,
  a_qr,
  a_field 
)
Value:
do \
{ \
(a_qr)->a_field.qre_next = (a_qrelm)->a_field.qre_next; \
(a_qr)->a_field.qre_prev = (a_qrelm); \
(a_qr)->a_field.qre_next->a_field.qre_prev = (a_qr); \
(a_qrelm)->a_field.qre_next = (a_qr); \
} while (0)

Definition at line 25 of file qr.h.

◆ qr_before_insert

#define qr_before_insert (   a_qrelm,
  a_qr,
  a_field 
)
Value:
do { \
(a_qr)->a_field.qre_prev = (a_qrelm)->a_field.qre_prev; \
(a_qr)->a_field.qre_next = (a_qrelm); \
(a_qr)->a_field.qre_prev->a_field.qre_next = (a_qr); \
(a_qrelm)->a_field.qre_prev = (a_qr); \
} while (0)

Definition at line 18 of file qr.h.

◆ qr_foreach

#define qr_foreach (   var,
  a_qr,
  a_field 
)
Value:
for ((var) = (a_qr); \
(var) != NULL; \
(var) = (((var)->a_field.qre_next != (a_qr)) \
? (var)->a_field.qre_next : NULL))
#define NULL
Definition: cris-opc.c:27

Definition at line 59 of file qr.h.

◆ qr_meld

#define qr_meld (   a_qr_a,
  a_qr_b,
  a_field 
)
Value:
do { \
void *t; \
(a_qr_a)->a_field.qre_prev->a_field.qre_next = (a_qr_b); \
(a_qr_b)->a_field.qre_prev->a_field.qre_next = (a_qr_a); \
t = (a_qr_a)->a_field.qre_prev; \
(a_qr_a)->a_field.qre_prev = (a_qr_b)->a_field.qre_prev; \
(a_qr_b)->a_field.qre_prev = t; \
} while (0)

Definition at line 34 of file qr.h.

◆ qr_new

#define qr_new (   a_qr,
  a_field 
)
Value:
do { \
(a_qr)->a_field.qre_next = (a_qr); \
(a_qr)->a_field.qre_prev = (a_qr); \
} while (0)

Definition at line 9 of file qr.h.

◆ qr_next

#define qr_next (   a_qr,
  a_field 
)    ((a_qr)->a_field.qre_next)

Definition at line 14 of file qr.h.

◆ qr_prev

#define qr_prev (   a_qr,
  a_field 
)    ((a_qr)->a_field.qre_prev)

Definition at line 16 of file qr.h.

◆ qr_remove

#define qr_remove (   a_qr,
  a_field 
)
Value:
do { \
(a_qr)->a_field.qre_prev->a_field.qre_next \
= (a_qr)->a_field.qre_next; \
(a_qr)->a_field.qre_next->a_field.qre_prev \
= (a_qr)->a_field.qre_prev; \
(a_qr)->a_field.qre_next = (a_qr); \
(a_qr)->a_field.qre_prev = (a_qr); \
} while (0)

Definition at line 50 of file qr.h.

◆ qr_reverse_foreach

#define qr_reverse_foreach (   var,
  a_qr,
  a_field 
)
Value:
for ((var) = ((a_qr) != NULL) ? qr_prev(a_qr, a_field) : NULL; \
(var) != NULL; \
(var) = (((var) != (a_qr)) \
? (var)->a_field.qre_prev : NULL))
#define qr_prev(a_qr, a_field)
Definition: qr.h:16

Definition at line 65 of file qr.h.

◆ qr_split

#define qr_split (   a_qr_a,
  a_qr_b,
  a_field 
)     qr_meld((a_qr_a), (a_qr_b), a_field)

Definition at line 47 of file qr.h.