]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/bbpos.h
Update bcachefs sources to 24bdb6fed91c bcachefs: bch2_btree_id_str()
[bcachefs-tools-debian] / libbcachefs / bbpos.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_BBPOS_H
3 #define _BCACHEFS_BBPOS_H
4
5 #include "bkey_methods.h"
6 #include "btree_cache.h"
7
8 struct bbpos {
9         enum btree_id           btree;
10         struct bpos             pos;
11 };
12
13 static inline struct bbpos BBPOS(enum btree_id btree, struct bpos pos)
14 {
15         return (struct bbpos) { btree, pos };
16 }
17
18 #define BBPOS_MIN       BBPOS(0, POS_MIN)
19 #define BBPOS_MAX       BBPOS(BTREE_ID_NR - 1, POS_MAX)
20
21 static inline int bbpos_cmp(struct bbpos l, struct bbpos r)
22 {
23         return cmp_int(l.btree, r.btree) ?: bpos_cmp(l.pos, r.pos);
24 }
25
26 static inline struct bbpos bbpos_successor(struct bbpos pos)
27 {
28         if (bpos_cmp(pos.pos, SPOS_MAX)) {
29                 pos.pos = bpos_successor(pos.pos);
30                 return pos;
31         }
32
33         if (pos.btree != BTREE_ID_NR) {
34                 pos.btree++;
35                 pos.pos = POS_MIN;
36                 return pos;
37         }
38
39         BUG();
40 }
41
42 static inline void bch2_bbpos_to_text(struct printbuf *out, struct bbpos pos)
43 {
44         prt_str(out, bch2_btree_id_str(pos.btree));
45         prt_char(out, ':');
46         bch2_bpos_to_text(out, pos.pos);
47 }
48
49 #endif /* _BCACHEFS_BBPOS_H */