linux red black tree code parent pointer
-
hallo,
ich wüsste mal gerne wieso in dem code die farbe und der pointer in einen pointer gespeichert werden, dass es das struct kleiner macht ist mir klar, aber wieso überschneiden sich die werte nicht? liegt das am alignment?
typedef struct _rb_node { unsigned long rb_parent_color; #define RB_RED 0 #define RB_BLACK 1 struct _rb_node *rb_right; struct _rb_node *rb_left; }rb_node;
static inline void rb_set_parent(rb_node *rb, rb_node *p) { rb->rb_parent_color = (rb->rb_parent_color & 3) | (unsigned long)p; }
#define rb_parent(r) ((rb_node *)((r)->rb_parent_color & ~3))
-
Hässlicher C Frickelcode. Und es heißt übrigens einem Pointer.
-
__-- schrieb:
liegt das am alignment?
Ja.
-
rolleis schrieb:
Hässlicher C Frickelcode.
dafür wird er aber in verdammt vielen os's verwendet...
volkard schrieb:
__-- schrieb:
liegt das am alignment?
Ja.
danke, werd mich damit nochmal ausführlicher beschäftigen müssen
-
Ideologisch motiviertes Bastelwerk
-
unzumutabahr schrieb:
Ideologisch motiviertes Bastelwerk
wärst du so nett mir ein anderes snippet vorzuschlagen welches ich in meinem code verwenden könnte?