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

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

#if defined(IRLMP_ENUMDEVICES) || (defined(HAVE_DECL_IRLMP_ENUMDEVICES) && HAVE_DECL_IRLMP_ENUMDEVICES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_ENUMDEVICES) == (1), "IRLMP_ENUMDEVICES != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_ENUMDEVICES 1
#endif
#if defined(IRLMP_IAS_SET) || (defined(HAVE_DECL_IRLMP_IAS_SET) && HAVE_DECL_IRLMP_IAS_SET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_IAS_SET) == (2), "IRLMP_IAS_SET != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_IAS_SET 2
#endif
#if defined(IRLMP_IAS_QUERY) || (defined(HAVE_DECL_IRLMP_IAS_QUERY) && HAVE_DECL_IRLMP_IAS_QUERY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_IAS_QUERY) == (3), "IRLMP_IAS_QUERY != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_IAS_QUERY 3
#endif
#if defined(IRLMP_HINTS_SET) || (defined(HAVE_DECL_IRLMP_HINTS_SET) && HAVE_DECL_IRLMP_HINTS_SET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_HINTS_SET) == (4), "IRLMP_HINTS_SET != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_HINTS_SET 4
#endif
#if defined(IRLMP_QOS_SET) || (defined(HAVE_DECL_IRLMP_QOS_SET) && HAVE_DECL_IRLMP_QOS_SET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_QOS_SET) == (5), "IRLMP_QOS_SET != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_QOS_SET 5
#endif
#if defined(IRLMP_QOS_GET) || (defined(HAVE_DECL_IRLMP_QOS_GET) && HAVE_DECL_IRLMP_QOS_GET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_QOS_GET) == (6), "IRLMP_QOS_GET != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_QOS_GET 6
#endif
#if defined(IRLMP_MAX_SDU_SIZE) || (defined(HAVE_DECL_IRLMP_MAX_SDU_SIZE) && HAVE_DECL_IRLMP_MAX_SDU_SIZE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_MAX_SDU_SIZE) == (7), "IRLMP_MAX_SDU_SIZE != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_MAX_SDU_SIZE 7
#endif
#if defined(IRLMP_IAS_GET) || (defined(HAVE_DECL_IRLMP_IAS_GET) && HAVE_DECL_IRLMP_IAS_GET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_IAS_GET) == (8), "IRLMP_IAS_GET != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_IAS_GET 8
#endif
#if defined(IRLMP_IAS_DEL) || (defined(HAVE_DECL_IRLMP_IAS_DEL) && HAVE_DECL_IRLMP_IAS_DEL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_IAS_DEL) == (9), "IRLMP_IAS_DEL != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_IAS_DEL 9
#endif
#if defined(IRLMP_HINT_MASK_SET) || (defined(HAVE_DECL_IRLMP_HINT_MASK_SET) && HAVE_DECL_IRLMP_HINT_MASK_SET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_HINT_MASK_SET) == (10), "IRLMP_HINT_MASK_SET != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_HINT_MASK_SET 10
#endif
#if defined(IRLMP_WAITDEVICE) || (defined(HAVE_DECL_IRLMP_WAITDEVICE) && HAVE_DECL_IRLMP_WAITDEVICE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IRLMP_WAITDEVICE) == (11), "IRLMP_WAITDEVICE != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IRLMP_WAITDEVICE 11
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat sock_irda_options in mpers mode

# else

static
const struct xlat sock_irda_options[] = {
 [IRLMP_ENUMDEVICES] = XLAT(IRLMP_ENUMDEVICES),
 [IRLMP_IAS_SET] = XLAT(IRLMP_IAS_SET),
 [IRLMP_IAS_QUERY] = XLAT(IRLMP_IAS_QUERY),
 [IRLMP_HINTS_SET] = XLAT(IRLMP_HINTS_SET),
 [IRLMP_QOS_SET] = XLAT(IRLMP_QOS_SET),
 [IRLMP_QOS_GET] = XLAT(IRLMP_QOS_GET),
 [IRLMP_MAX_SDU_SIZE] = XLAT(IRLMP_MAX_SDU_SIZE),
 [IRLMP_IAS_GET] = XLAT(IRLMP_IAS_GET),
 [IRLMP_IAS_DEL] = XLAT(IRLMP_IAS_DEL),
 [IRLMP_HINT_MASK_SET] = XLAT(IRLMP_HINT_MASK_SET),
 [IRLMP_WAITDEVICE] = XLAT(IRLMP_WAITDEVICE),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
