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

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

#if defined(NFC_LLCP_RW) || (defined(HAVE_DECL_NFC_LLCP_RW) && HAVE_DECL_NFC_LLCP_RW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFC_LLCP_RW) == (0), "NFC_LLCP_RW != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFC_LLCP_RW 0
#endif
#if defined(NFC_LLCP_MIUX) || (defined(HAVE_DECL_NFC_LLCP_MIUX) && HAVE_DECL_NFC_LLCP_MIUX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFC_LLCP_MIUX) == (1), "NFC_LLCP_MIUX != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFC_LLCP_MIUX 1
#endif
#if defined(NFC_LLCP_REMOTE_MIU) || (defined(HAVE_DECL_NFC_LLCP_REMOTE_MIU) && HAVE_DECL_NFC_LLCP_REMOTE_MIU)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFC_LLCP_REMOTE_MIU) == (2), "NFC_LLCP_REMOTE_MIU != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFC_LLCP_REMOTE_MIU 2
#endif
#if defined(NFC_LLCP_REMOTE_LTO) || (defined(HAVE_DECL_NFC_LLCP_REMOTE_LTO) && HAVE_DECL_NFC_LLCP_REMOTE_LTO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFC_LLCP_REMOTE_LTO) == (3), "NFC_LLCP_REMOTE_LTO != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFC_LLCP_REMOTE_LTO 3
#endif
#if defined(NFC_LLCP_REMOTE_RW) || (defined(HAVE_DECL_NFC_LLCP_REMOTE_RW) && HAVE_DECL_NFC_LLCP_REMOTE_RW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFC_LLCP_REMOTE_RW) == (4), "NFC_LLCP_REMOTE_RW != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFC_LLCP_REMOTE_RW 4
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat sock_nfcllcp_options in mpers mode

# else

static
const struct xlat sock_nfcllcp_options[] = {
 [NFC_LLCP_RW] = XLAT(NFC_LLCP_RW),
 [NFC_LLCP_MIUX] = XLAT(NFC_LLCP_MIUX),
 [NFC_LLCP_REMOTE_MIU] = XLAT(NFC_LLCP_REMOTE_MIU),
 [NFC_LLCP_REMOTE_LTO] = XLAT(NFC_LLCP_REMOTE_LTO),
 [NFC_LLCP_REMOTE_RW] = XLAT(NFC_LLCP_REMOTE_RW),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
