/* Generated by ./xlat/gen.sh from ./xlat/btrfs_tree_objectids.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(BTRFS_ROOT_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_ROOT_TREE_OBJECTID) && HAVE_DECL_BTRFS_ROOT_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_ROOT_TREE_OBJECTID) == (1ULL), "BTRFS_ROOT_TREE_OBJECTID != 1ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_ROOT_TREE_OBJECTID 1ULL
#endif
#if defined(BTRFS_EXTENT_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_EXTENT_TREE_OBJECTID) && HAVE_DECL_BTRFS_EXTENT_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_EXTENT_TREE_OBJECTID) == (2ULL), "BTRFS_EXTENT_TREE_OBJECTID != 2ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_EXTENT_TREE_OBJECTID 2ULL
#endif
#if defined(BTRFS_CHUNK_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_CHUNK_TREE_OBJECTID) && HAVE_DECL_BTRFS_CHUNK_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_CHUNK_TREE_OBJECTID) == (3ULL), "BTRFS_CHUNK_TREE_OBJECTID != 3ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_CHUNK_TREE_OBJECTID 3ULL
#endif
#if defined(BTRFS_DEV_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_DEV_TREE_OBJECTID) && HAVE_DECL_BTRFS_DEV_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_DEV_TREE_OBJECTID) == (4ULL), "BTRFS_DEV_TREE_OBJECTID != 4ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_DEV_TREE_OBJECTID 4ULL
#endif
#if defined(BTRFS_FS_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FS_TREE_OBJECTID) && HAVE_DECL_BTRFS_FS_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_FS_TREE_OBJECTID) == (5ULL), "BTRFS_FS_TREE_OBJECTID != 5ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_FS_TREE_OBJECTID 5ULL
#endif
#if defined(BTRFS_ROOT_TREE_DIR_OBJECTID) || (defined(HAVE_DECL_BTRFS_ROOT_TREE_DIR_OBJECTID) && HAVE_DECL_BTRFS_ROOT_TREE_DIR_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_ROOT_TREE_DIR_OBJECTID) == (6ULL), "BTRFS_ROOT_TREE_DIR_OBJECTID != 6ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_ROOT_TREE_DIR_OBJECTID 6ULL
#endif
#if defined(BTRFS_CSUM_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_CSUM_TREE_OBJECTID) && HAVE_DECL_BTRFS_CSUM_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_CSUM_TREE_OBJECTID) == (7ULL), "BTRFS_CSUM_TREE_OBJECTID != 7ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_CSUM_TREE_OBJECTID 7ULL
#endif
#if defined(BTRFS_QUOTA_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_QUOTA_TREE_OBJECTID) && HAVE_DECL_BTRFS_QUOTA_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_QUOTA_TREE_OBJECTID) == (8ULL), "BTRFS_QUOTA_TREE_OBJECTID != 8ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_QUOTA_TREE_OBJECTID 8ULL
#endif
#if defined(BTRFS_UUID_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_UUID_TREE_OBJECTID) && HAVE_DECL_BTRFS_UUID_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_UUID_TREE_OBJECTID) == (9ULL), "BTRFS_UUID_TREE_OBJECTID != 9ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_UUID_TREE_OBJECTID 9ULL
#endif
#if defined(BTRFS_FREE_SPACE_TREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FREE_SPACE_TREE_OBJECTID) && HAVE_DECL_BTRFS_FREE_SPACE_TREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_FREE_SPACE_TREE_OBJECTID) == (10ULL), "BTRFS_FREE_SPACE_TREE_OBJECTID != 10ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_FREE_SPACE_TREE_OBJECTID 10ULL
#endif
#if defined(BTRFS_FIRST_FREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_FIRST_FREE_OBJECTID) && HAVE_DECL_BTRFS_FIRST_FREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_FIRST_FREE_OBJECTID) == (256ULL), "BTRFS_FIRST_FREE_OBJECTID != 256ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_FIRST_FREE_OBJECTID 256ULL
#endif
#if defined(BTRFS_LAST_FREE_OBJECTID) || (defined(HAVE_DECL_BTRFS_LAST_FREE_OBJECTID) && HAVE_DECL_BTRFS_LAST_FREE_OBJECTID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_LAST_FREE_OBJECTID) == (-256ULL), "BTRFS_LAST_FREE_OBJECTID != -256ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_LAST_FREE_OBJECTID -256ULL
#endif
#if defined(UINT64_MAX) || (defined(HAVE_DECL_UINT64_MAX) && HAVE_DECL_UINT64_MAX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((UINT64_MAX) == (-1ULL), "UINT64_MAX != -1ULL");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define UINT64_MAX -1ULL
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

extern const struct xlat btrfs_tree_objectids[];

# else

#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
#  endif
const struct xlat btrfs_tree_objectids[] = {
 XLAT_TYPE(uint64_t, BTRFS_ROOT_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_EXTENT_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_CHUNK_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_DEV_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_FS_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_ROOT_TREE_DIR_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_CSUM_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_QUOTA_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_UUID_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_FREE_SPACE_TREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_FIRST_FREE_OBJECTID),
 XLAT_TYPE(uint64_t, BTRFS_LAST_FREE_OBJECTID),
 XLAT_TYPE(uint64_t, UINT64_MAX),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
