# std: add red-black tree implementation · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/5d2abf4402bdbd70eb95cf0d516ce12ff4202101)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: 5d2abf4402bdbd70eb95cf0d516ce12ff4202101

Requested commit: 5d2abf4402bdbd70eb95cf0d516ce12ff4202101

Commit: 5d2abf4402bdbd70eb95cf0d516ce12ff4202101

Tree: 51c8d3ce5c93b2a9cd7985275916c36ddb486bb4

Author: Shawn Landden

Committer: Shawn Landden

## Message

```
std: add red-black tree implementation

This is to be used with @fieldParentPtr();

Example:

const rb = @import("std").rb;

const Number = struct {
    node: rb.Node,
    value: i32,
};

fn number(node: *rb.Node) *Number {
    @fieldParentPtr(Number, "node", node);
}

fn compare(l: *rb.Node, r: *rb.Node) rb.Compare {
    var left = number(l);
    var right = number(r);

    if (left.value < right.value) {
        return rb.Compare.LessThan;
    } else if (left.value == right.value) {
        return rb.Compare.Equal;
    } else if (left.value > right.value) {
        return rb.Compare.GreaterThan;
    }
    unreachable;
}
--

A version that caches rb.Tree.first() could be added in the future.

```

## Parents

- [aa232089f2beaa273458a9fa75b2ba5c70f71805](https://git.cafe/gitcafe/zig/commit/aa232089f2beaa273458a9fa75b2ba5c70f71805?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/5d2abf4402bdbd70eb95cf0d516ce12ff4202101?format=markdown)
