#ifndef AMDUAT_ENC_ASL_TGK_EXEC_PLAN_H #define AMDUAT_ENC_ASL_TGK_EXEC_PLAN_H #include "amduat/asl/core.h" #include #include #include #ifdef __cplusplus extern "C" { #endif enum { AMDUAT_ASL_TGK_EXEC_PLAN_VERSION = 1 }; typedef enum { AMDUAT_ASL_TGK_EXEC_OP_SEGMENT_SCAN = 0, AMDUAT_ASL_TGK_EXEC_OP_INDEX_FILTER = 1, AMDUAT_ASL_TGK_EXEC_OP_MERGE = 2, AMDUAT_ASL_TGK_EXEC_OP_PROJECTION = 3, AMDUAT_ASL_TGK_EXEC_OP_TGK_TRAVERSAL = 4, AMDUAT_ASL_TGK_EXEC_OP_AGGREGATION = 5, AMDUAT_ASL_TGK_EXEC_OP_LIMIT_OFFSET = 6, AMDUAT_ASL_TGK_EXEC_OP_SHARD_DISPATCH = 7, AMDUAT_ASL_TGK_EXEC_OP_SIMD_FILTER = 8, AMDUAT_ASL_TGK_EXEC_OP_TOMBSTONE_SHADOW = 9 } amduat_asl_tgk_exec_operator_type_t; typedef enum { AMDUAT_ASL_TGK_EXEC_OP_FLAG_NONE = 0x00, AMDUAT_ASL_TGK_EXEC_OP_FLAG_PARALLEL = 0x01, AMDUAT_ASL_TGK_EXEC_OP_FLAG_OPTIONAL = 0x02 } amduat_asl_tgk_exec_operator_flags_t; typedef struct { uint64_t logseq_min; uint64_t logseq_max; } amduat_asl_tgk_exec_snapshot_range_t; typedef struct { struct { uint8_t is_asl_segment; uint64_t segment_start_id; uint64_t segment_end_id; } segment_scan; struct { uint32_t artifact_type_tag; uint8_t has_type_tag; uint32_t edge_type_key; uint8_t has_edge_type; uint8_t role; } index_filter; struct { uint8_t deterministic; } merge; struct { uint8_t project_artifact_id; uint8_t project_tgk_edge_id; uint8_t project_node_id; uint8_t project_type_tag; } projection; struct { uint64_t start_node_id; uint32_t traversal_depth; uint8_t direction; } tgk_traversal; struct { uint8_t agg_count; uint8_t agg_union; uint8_t agg_sum; } aggregation; struct { uint64_t limit; uint64_t offset; } limit_offset; } amduat_asl_tgk_exec_operator_params_t; typedef struct { uint32_t op_id; amduat_asl_tgk_exec_operator_type_t op_type; amduat_asl_tgk_exec_operator_flags_t flags; amduat_asl_tgk_exec_snapshot_range_t snapshot; amduat_asl_tgk_exec_operator_params_t params; uint32_t input_count; uint32_t inputs[8]; } amduat_asl_tgk_exec_operator_def_t; typedef struct { uint32_t plan_version; uint32_t operator_count; amduat_asl_tgk_exec_operator_def_t *operators; } amduat_asl_tgk_exec_plan_t; bool amduat_enc_asl_tgk_exec_plan_encode_v1( const amduat_asl_tgk_exec_plan_t *plan, amduat_octets_t *out_bytes); bool amduat_enc_asl_tgk_exec_plan_decode_v1( amduat_octets_t bytes, amduat_asl_tgk_exec_plan_t *out_plan); void amduat_enc_asl_tgk_exec_plan_free( amduat_asl_tgk_exec_plan_t *plan); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* AMDUAT_ENC_ASL_TGK_EXEC_PLAN_H */