| 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | 
|---|
| 2 | #ifndef _LINUX_RBTREE_TYPES_H | 
|---|
| 3 | #define _LINUX_RBTREE_TYPES_H | 
|---|
| 4 |  | 
|---|
| 5 | struct rb_node { | 
|---|
| 6 | unsigned long  __rb_parent_color; | 
|---|
| 7 | struct rb_node *rb_right; | 
|---|
| 8 | struct rb_node *rb_left; | 
|---|
| 9 | } __attribute__((aligned(sizeof(long)))); | 
|---|
| 10 | /* The alignment might seem pointless, but allegedly CRIS needs it */ | 
|---|
| 11 |  | 
|---|
| 12 | struct rb_root { | 
|---|
| 13 | struct rb_node *rb_node; | 
|---|
| 14 | }; | 
|---|
| 15 |  | 
|---|
| 16 | /* | 
|---|
| 17 | * Leftmost-cached rbtrees. | 
|---|
| 18 | * | 
|---|
| 19 | * We do not cache the rightmost node based on footprint | 
|---|
| 20 | * size vs number of potential users that could benefit | 
|---|
| 21 | * from O(1) rb_last(). Just not worth it, users that want | 
|---|
| 22 | * this feature can always implement the logic explicitly. | 
|---|
| 23 | * Furthermore, users that want to cache both pointers may | 
|---|
| 24 | * find it a bit asymmetric, but that's ok. | 
|---|
| 25 | */ | 
|---|
| 26 | struct rb_root_cached { | 
|---|
| 27 | struct rb_root rb_root; | 
|---|
| 28 | struct rb_node *rb_leftmost; | 
|---|
| 29 | }; | 
|---|
| 30 |  | 
|---|
| 31 | #define RB_ROOT (struct rb_root) { NULL, } | 
|---|
| 32 | #define RB_ROOT_CACHED (struct rb_root_cached) { {NULL, }, NULL } | 
|---|
| 33 |  | 
|---|
| 34 | #endif | 
|---|
| 35 |  | 
|---|