#ifndef _CTABLEGEN_TABLEGEN_H_
#define _CTABLEGEN_TABLEGEN_H_
#ifdef __cplusplus
#include <cstddef>
#include <cstdint>
#else
#include <stddef.h>
#include <stdint.h>
#endif
#include "Types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
TABLEGEN_DK_ERROR,
TABLEGEN_DK_WARNING,
TABLEGEN_DK_REMARK,
TABLEGEN_DK_NOTE,
} TableGenDiagKind;
typedef enum {
TableGenBitRecTyKind,
TableGenBitsRecTyKind,
TableGenCodeRecTyKind,
TableGenIntRecTyKind,
TableGenStringRecTyKind,
TableGenListRecTyKind,
TableGenDagRecTyKind,
TableGenRecordRecTyKind,
TableGenInvalidRecTyKind
} TableGenRecTyKind;
typedef struct TableGenStringRef {
const char *data;
size_t len;
} TableGenStringRef;
typedef void (*TableGenStringCallback)(TableGenStringRef, void *);
TableGenParserRef tableGenGet();
void tableGenFree(TableGenParserRef tg_ref);
TableGenBool tableGenAddSource(TableGenParserRef tg_ref, const char *source);
void tableGenAddSourceFile(TableGenParserRef tg_ref, TableGenStringRef source);
void tableGenAddIncludeDirectory(TableGenParserRef tg_ref,
TableGenStringRef include);
TableGenRecordKeeperRef tableGenParse(TableGenParserRef tg_ref);
void tableGenRecordKeeperFree(TableGenRecordKeeperRef rk_ref);
TableGenRecordMapRef
tableGenRecordKeeperGetClasses(TableGenRecordKeeperRef rk_ref);
TableGenRecordMapRef
tableGenRecordKeeperGetDefs(TableGenRecordKeeperRef rk_ref);
TableGenRecordRef tableGenRecordKeeperGetClass(TableGenRecordKeeperRef rk_ref,
TableGenStringRef name);
TableGenRecordRef tableGenRecordKeeperGetDef(TableGenRecordKeeperRef rk_ref,
TableGenStringRef name);
TableGenRecordVectorRef
tableGenRecordKeeperGetAllDerivedDefinitions(TableGenRecordKeeperRef rk_ref,
TableGenStringRef className);
TableGenRecordVectorRef tableGenRecordKeeperGetAllDerivedDefinitionsIfDefined(
TableGenRecordKeeperRef rk_ref, TableGenStringRef className);
TableGenRecordRef tableGenRecordVectorGet(TableGenRecordVectorRef vec_ref,
size_t index);
size_t tableGenRecordVectorSize(TableGenRecordVectorRef vec_ref);
void tableGenRecordVectorFree(TableGenRecordVectorRef vec_ref);
TableGenRecordKeeperIteratorRef
tableGenRecordKeeperGetFirstClass(TableGenRecordKeeperRef rk_ref);
TableGenRecordKeeperIteratorRef
tableGenRecordKeeperGetFirstDef(TableGenRecordKeeperRef rk_ref);
void tableGenRecordKeeperGetNextClass(TableGenRecordKeeperIteratorRef *item);
void tableGenRecordKeeperGetNextDef(TableGenRecordKeeperIteratorRef *item);
TableGenStringRef
tableGenRecordKeeperItemGetName(TableGenRecordKeeperIteratorRef item);
TableGenRecordRef
tableGenRecordKeeperItemGetRecord(TableGenRecordKeeperIteratorRef item);
void tableGenRecordKeeperIteratorFree(TableGenRecordKeeperIteratorRef item);
TableGenRecordKeeperIteratorRef
tableGenRecordKeeperIteratorClone(TableGenRecordKeeperIteratorRef item);
TableGenRecordKeeperRef tableGenRecordGetRecords(TableGenRecordRef record_ref);
TableGenStringRef tableGenRecordGetName(TableGenRecordRef record_ref);
TableGenRecordValRef tableGenRecordGetValue(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenRecTyKind tableGenRecordGetFieldType(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenBool tableGenRecordIsAnonymous(TableGenRecordRef record_ref);
TableGenBool tableGenRecordIsSubclassOf(TableGenRecordRef record_ref,
TableGenStringRef name);
void tableGenRecordPrint(TableGenRecordRef record_ref,
TableGenStringCallback callback, void *userData);
void tableGenRecordDump(TableGenRecordRef record_ref);
TableGenSourceLocationRef tableGenRecordGetLoc(TableGenRecordRef record_ref);
size_t tableGenRecordGetNumTemplateArgs(TableGenRecordRef record_ref);
TableGenStringRef tableGenRecordGetTemplateArgName(TableGenRecordRef record_ref,
size_t index);
size_t tableGenRecordGetNumSuperClasses(TableGenRecordRef record_ref);
TableGenRecordRef tableGenRecordGetSuperClass(TableGenRecordRef record_ref,
size_t index);
TableGenStringRef tableGenRecordValGetName(TableGenRecordValRef rv_ref);
TableGenTypedInitRef tableGenRecordValGetNameInit(TableGenRecordValRef rv_ref);
TableGenRecTyKind tableGenRecordValGetType(TableGenRecordValRef rv_ref);
TableGenTypedInitRef tableGenRecordValGetValue(TableGenRecordValRef rv_ref);
void tableGenRecordValTest(TableGenRecordValRef rv_ref);
TableGenRecordValRef tableGenRecordGetFirstValue(TableGenRecordRef record_ref);
TableGenRecordValRef tableGenRecordValNext(TableGenRecordRef record,
TableGenRecordValRef current);
void tableGenRecordValPrint(TableGenRecordValRef rv_ref,
TableGenStringCallback callback, void *userData);
void tableGenRecordValDump(TableGenRecordValRef rv_ref);
TableGenSourceLocationRef tableGenRecordValGetLoc(TableGenRecordValRef rv_ref);
char *tableGenRecordValGetValAsNewString(TableGenRecordValRef rv_ref);
TableGenBool tableGenRecordValGetValAsBit(TableGenRecordValRef rv_ref,
int8_t *bit);
TableGenBool tableGenRecordValGetValAsInt(TableGenRecordValRef rv_ref,
int64_t *integer);
TableGenRecordRef
tableGenRecordValGetValAsDefRecord(TableGenRecordValRef rv_ref);
TableGenRecTyKind tableGenListRecordGetType(TableGenRecordValRef rv_ref);
TableGenTypedInitRef tableGenListRecordGet(TableGenTypedInitRef rv_ref,
size_t index);
size_t tableGenListRecordNumElements(TableGenTypedInitRef rv_ref);
TableGenRecTyKind tableGenListInitGetElementType(TableGenTypedInitRef ti);
TableGenRecordRef tableGenDagRecordOperator(TableGenTypedInitRef rv_ref);
TableGenTypedInitRef tableGenDagRecordGet(TableGenTypedInitRef rv_ref,
size_t index);
TableGenStringRef tableGenDagRecordArgName(TableGenTypedInitRef rv_ref,
size_t index);
size_t tableGenDagRecordNumArgs(TableGenTypedInitRef rv_ref);
TableGenRecTyKind tableGenInitRecType(TableGenTypedInitRef ti);
TableGenBool tableGenBitInitGetValue(TableGenTypedInitRef ti, int8_t *bit);
TableGenBool tableGenBitsInitGetNumBits(TableGenTypedInitRef ti, size_t *len);
TableGenTypedInitRef tableGenBitsInitGetBitInit(TableGenTypedInitRef ti,
size_t index);
uint64_t tableGenBitsInitConvertKnownBitsToInt(TableGenTypedInitRef ti);
TableGenBool tableGenIntInitGetValue(TableGenTypedInitRef ti, int64_t *integer);
TableGenStringRef tableGenStringInitGetValue(TableGenTypedInitRef ti);
char *tableGenStringInitGetValueNewString(TableGenTypedInitRef ti);
TableGenRecordRef tableGenDefInitGetValue(TableGenTypedInitRef ti);
void tableGenInitPrint(TableGenTypedInitRef ti, TableGenStringCallback callback,
void *userData);
void tableGenInitDump(TableGenTypedInitRef ti);
TableGenBool tableGenPrintError(TableGenParserRef ref,
TableGenSourceLocationRef loc_ref,
TableGenDiagKind dk, TableGenStringRef message,
TableGenStringCallback callback,
void *userData);
TableGenSourceLocationRef tableGenSourceLocationNull();
TableGenSourceLocationRef
tableGenSourceLocationClone(TableGenSourceLocationRef loc_ref);
TableGenBool tableGenBitInitIsVarBit(TableGenTypedInitRef ti);
TableGenStringRef tableGenVarBitInitGetVarName(TableGenTypedInitRef ti);
size_t tableGenVarBitInitGetBitNum(TableGenTypedInitRef ti);
void tableGenSourceLocationFree(TableGenSourceLocationRef loc_ref);
void tableGenStringFree(const char *str);
void tableGenStringArrayFree(const char **str_array);
TableGenBool tableGenRecordGetValueAsInt(TableGenRecordRef record_ref,
TableGenStringRef name, int64_t *out);
TableGenStringRef tableGenRecordGetValueAsString(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenBool tableGenRecordGetValueAsBit(TableGenRecordRef record_ref,
TableGenStringRef name, int8_t *out);
TableGenRecordRef tableGenRecordGetValueAsDef(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenTypedInitRef tableGenRecordGetValueAsDag(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenTypedInitRef
tableGenRecordGetValueAsBitsInit(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenTypedInitRef
tableGenRecordGetValueAsListInit(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenRecordVectorRef
tableGenRecordGetValueAsListOfDefs(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenBool tableGenRecordGetValueAsListOfInts(TableGenRecordRef record_ref,
TableGenStringRef name,
int64_t **out, size_t *out_len);
TableGenBool tableGenRecordGetValueAsListOfStrings(TableGenRecordRef record_ref,
TableGenStringRef name,
TableGenStringRef **out,
size_t *out_len);
TableGenBool
tableGenRecordGetValueAsOptionalString(TableGenRecordRef record_ref,
TableGenStringRef name,
TableGenStringRef *out);
TableGenRecordRef
tableGenRecordGetValueAsOptionalDef(TableGenRecordRef record_ref,
TableGenStringRef name);
TableGenBool tableGenRecordIsValueUnset(TableGenRecordRef record_ref,
TableGenStringRef name);
void tableGenIntArrayFree(int64_t *arr);
void tableGenStringRefArrayFree(TableGenStringRef *arr);
TableGenBool tableGenRecordIsClass(TableGenRecordRef record_ref);
TableGenTypedInitRef tableGenRecordGetDefInit(TableGenRecordRef record_ref);
unsigned tableGenRecordGetID(TableGenRecordRef record_ref);
TableGenTypedInitRef tableGenRecordGetNameInit(TableGenRecordRef record_ref);
TableGenBool tableGenRecordHasDirectSuperClass(TableGenRecordRef record_ref,
TableGenRecordRef super_ref);
size_t tableGenRecordValGetBitsWidth(TableGenRecordValRef rv_ref);
TableGenRecTyKind
tableGenRecordValGetListElementType(TableGenRecordValRef rv_ref);
size_t tableGenRecordRecTyGetNumClasses(TableGenRecordRef record_ref);
TableGenRecordRef tableGenRecordRecTyGetClass(TableGenRecordRef record_ref,
size_t index);
TableGenBool tableGenRecordRecTyIsSubClassOf(TableGenRecordRef record_ref,
TableGenRecordRef class_ref);
TableGenBool tableGenRecordValIsTemplateArg(TableGenRecordValRef rv_ref);
TableGenBool tableGenRecordValIsNonconcreteOK(TableGenRecordValRef rv_ref);
size_t tableGenDagRecordGetArgNo(TableGenTypedInitRef dag_ref,
TableGenStringRef name);
TableGenStringRef
tableGenRecordKeeperGetInputFilename(TableGenRecordKeeperRef rk_ref);
TableGenTypedInitRef
tableGenRecordKeeperGetGlobal(TableGenRecordKeeperRef rk_ref,
TableGenStringRef name);
#ifdef __cplusplus
}
#endif
#endif