#ifndef _TUPLE_H_
#define _TUPLE_H_
#ifndef _ELEM_H_
#error "Need to include elem.h before tuple.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct tuple Tuple;
#define TUPLE_NULL ((Tuple*)0)
extern Tuple* tuple_new(int dim) returns_NONNULL;
extern void tuple_free(Tuple* tuple) expects_NONNULL;
extern bool tuple_is_valid(Tuple const* tuple) is_PURE;
extern Tuple* tuple_copy(Tuple const* tuple) expects_NONNULL returns_NONNULL;
extern bool tuple_cmp(Tuple const* tuple_a, Tuple const* tuple_b) expects_NONNULL;
extern int tuple_get_dim(Tuple const* tuple) expects_NONNULL is_PURE;
extern void tuple_set_elem(Tuple* tuple, int idx, Elem* elem) expects_NONNULL;
extern Elem const* tuple_get_elem(Tuple const* tuple, int idx) expects_NONNULL returns_NONNULL is_PURE;
extern Tuple* tuple_combine(Tuple const* ta, Tuple const* tb) expects_NONNULL returns_NONNULL;
extern void tuple_print(FILE* fp, Tuple const* tuple) expects_NONNULL;
extern unsigned int tuple_hash(Tuple const* tuple) expects_NONNULL is_PURE;
extern char* tuple_tostr(Tuple const* tuple) expects_NONNULL returns_NONNULL;
#ifdef __cplusplus
}
#endif
#endif