#ifndef RGRAPHVIZ_UTIL_H
#define RGRAPHVIZ_UTIL_H 1

#define STR(SE) CHAR(STRING_ELT(SE,0))

#define CHECK_Rgraphviz_graph(s) do { \
     if (TYPEOF(s) != EXTPTRSXP || \
         R_ExternalPtrTag(s) != Rgraphviz_graph_type_tag) \
         error("bad graph reference"); \
} while (0)

// char * x from STRSXP; need to Free(x)
#define ALLOC_CHAR(SE, ELT) CallocCharBufFrom(STRING_ELT(SE, ELT))
char *CallocCharBufFrom(SEXP);

// these are for other C-functions
SEXP assignAttrs(SEXP, SEXP, SEXP);
SEXP buildRagraph(Agraph_t *);
SEXP getListElement(SEXP list, const char *str);
SEXP Rgraphviz_ScalarLogicalFromRbool(Rboolean);
SEXP Rgraphviz_ScalarStringOrNull(const char *);

#endif // RGRAPHVIZ_UTIL_H