]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - c_src/libbcachefs/bbpos.h
move Rust sources to top level, C sources into c_src
[bcachefs-tools-debian] / c_src / libbcachefs / bbpos.h
diff --git a/c_src/libbcachefs/bbpos.h b/c_src/libbcachefs/bbpos.h
new file mode 100644 (file)
index 0000000..be2edce
--- /dev/null
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _BCACHEFS_BBPOS_H
+#define _BCACHEFS_BBPOS_H
+
+#include "bbpos_types.h"
+#include "bkey_methods.h"
+#include "btree_cache.h"
+
+static inline int bbpos_cmp(struct bbpos l, struct bbpos r)
+{
+       return cmp_int(l.btree, r.btree) ?: bpos_cmp(l.pos, r.pos);
+}
+
+static inline struct bbpos bbpos_successor(struct bbpos pos)
+{
+       if (bpos_cmp(pos.pos, SPOS_MAX)) {
+               pos.pos = bpos_successor(pos.pos);
+               return pos;
+       }
+
+       if (pos.btree != BTREE_ID_NR) {
+               pos.btree++;
+               pos.pos = POS_MIN;
+               return pos;
+       }
+
+       BUG();
+}
+
+static inline void bch2_bbpos_to_text(struct printbuf *out, struct bbpos pos)
+{
+       prt_str(out, bch2_btree_id_str(pos.btree));
+       prt_char(out, ':');
+       bch2_bpos_to_text(out, pos.pos);
+}
+
+#endif /* _BCACHEFS_BBPOS_H */