Monado OpenXR Runtime
xrt_future_value.h File Reference

Variant/algebraic data-type for holding the values of xrt_futures. More...

#include "xrt/xrt_compiler.h"
#include "xrt/xrt_defines.h"
#include <assert.h>
Include dependency graph for xrt_future_value.h:

Go to the source code of this file.

Data Structures

struct  xrt_future_value
 

Macros

#define XRT_FUTURE_VALUE_TYPES_WITH(_, P)
 
#define XRT_FUTURE_VALUE_WRAP_MACRO(N, T, M, X)   X(N, T, M)
 
#define XRT_FUTURE_VALUE_TYPES(X)   XRT_FUTURE_VALUE_TYPES_WITH(XRT_FUTURE_VALUE_WRAP_MACRO, X)
 
#define X_ENUM_ENTRY(TYPE_NAME, T, M)   XRT_FUTURE_VALUE_TYPE_##TYPE_NAME,
 
#define X_MEMBER_ENTRY(N, TYPE, MEMBER)   TYPE MEMBER;
 
#define XRT_FUTURE_VALUE_MAKE(TYPE_NAME, MEMBER, VALUE)
 
#define XRT_NULL_FUTURE_VALUE   XRT_FUTURE_VALUE_MAKE(NONE, uint64_, 0)
 
#define X_MAKE_CONS_FN(TYPE_NAME, TYPE, MEMBER)
 
#define XRT_FUTURE_VALUE_TYPECASE(TYPE_NAME, TYPE, MEMBER, P)
 
#define xrt_future_value_make(VALUE)
 

Typedefs

typedef enum xrt_future_value_type xrt_future_value_type_t
 

Enumerations

enum  xrt_future_value_type {
  XRT_FUTURE_VALUE_TYPE_NONE , XRT_FUTURE_VALUE_TYPE_UINT64 , XRT_FUTURE_VALUE_TYPE_INT64 , XRT_FUTURE_VALUE_TYPE_LIST_END ,
  XRT_FUTURE_VALUE_TYPE_COUNT = XRT_FUTURE_VALUE_TYPE_LIST_END - 1
}
 

Functions

static bool xrt_future_value_is_valid (const struct xrt_future_value *xfv)
 
static struct xrt_future_value xrt_future_value_make_none (const void *ignore)
 
static struct xrt_future_value xrt_future_value_make_uint64_ (uint64_t value)
 
static struct xrt_future_value xrt_future_value_make_uint64__ptr (const uint64_t *value)
 
static struct xrt_future_value xrt_future_value_make_int64_ (int64_t value)
 
static struct xrt_future_value xrt_future_value_make_int64__ptr (const int64_t *value)
 

Detailed Description

Variant/algebraic data-type for holding the values of xrt_futures.

Author
Korcan Hussein korca.nosp@m.n.hu.nosp@m.ssein.nosp@m.@col.nosp@m.labor.nosp@m.a.co.nosp@m.m
See also
xrt_future, xrt_future_result

Macro Definition Documentation

◆ X_MAKE_CONS_FN

#define X_MAKE_CONS_FN (   TYPE_NAME,
  TYPE,
  MEMBER 
)
Value:
static inline struct xrt_future_value xrt_future_value_make_##MEMBER(TYPE value) \
{ \
return XRT_FUTURE_VALUE_MAKE(TYPE_NAME, MEMBER, value); \
} \
\
static inline struct xrt_future_value xrt_future_value_make_##MEMBER##_ptr(const TYPE *value) \
{ \
assert(value != NULL); \
return XRT_FUTURE_VALUE_MAKE(TYPE_NAME, MEMBER, (*value)); \
}
Definition: xrt_future_value.h:46

◆ XRT_FUTURE_VALUE_MAKE

#define XRT_FUTURE_VALUE_MAKE (   TYPE_NAME,
  MEMBER,
  VALUE 
)
Value:
XRT_C11_COMPOUND(struct xrt_future_value) \
{ \
.MEMBER = VALUE, .type = XRT_FUTURE_VALUE_TYPE_##TYPE_NAME, \
}

◆ xrt_future_value_make

#define xrt_future_value_make (   VALUE)
Value:
_Generic((VALUE), \
XRT_FUTURE_VALUE_TYPES_WITH(XRT_FUTURE_VALUE_TYPECASE, _) \
default: xrt_future_value_make_none \
)(VALUE)

◆ XRT_FUTURE_VALUE_TYPECASE

#define XRT_FUTURE_VALUE_TYPECASE (   TYPE_NAME,
  TYPE,
  MEMBER,
 
)
Value:
TYPE: xrt_future_value_make_##MEMBER, \
const TYPE*: xrt_future_value_make_##MEMBER##_ptr,

◆ XRT_FUTURE_VALUE_TYPES_WITH

#define XRT_FUTURE_VALUE_TYPES_WITH (   _,
 
)
Value:
_(UINT64, uint64_t, uint64_, P) \
_(INT64, int64_t, int64_, P)