// -*- C++ -*- (c) 2010,2015 Petr Rockai #include "stdint.h" #ifdef _WIN32 #include #endif #ifndef DIVINE_GENERATOR_CESMI_CLIENT_H #define DIVINE_GENERATOR_CESMI_CLIENT_H enum cesmi_property_type { cesmi_pt_goal, cesmi_pt_deadlock, cesmi_pt_buchi }; /* the following are bitmasks (i.e. each value should be a power of 2 */ enum cesmi_flags { cesmi_goal = 1, cesmi_accepting = 2, cesmi_first_user_flag = 1 << 8 }; typedef struct { uint64_t handle; char *memory; } cesmi_node; typedef struct cesmi_setup { void *loader; cesmi_node (*make_node)( const struct cesmi_setup *setup, int size ); cesmi_node (*clone_node)( const struct cesmi_setup *setup, cesmi_node orig ); int (*add_property)( struct cesmi_setup *setup, char *id, char *desc, int type ); void *instance; // per-instance data; never touched by DiVinE int property_count; /* filled in by setup */ int property; /* filled in by loader */ int instance_initialised; void (*add_flag)( struct cesmi_setup *setup, char *name, int id, int type ); /* extensions at the end are ABI-compatible */ } cesmi_setup; /* prototypes that CESMI modules need to implement */ #ifdef __cplusplus extern "C" { #endif #ifdef _WIN32 /* augh; but very useful for show_node/show_transition */ int vasprintf(char **result, const char *format, va_list aq); int asprintf(char **result, const char *format, ...); #endif void setup ( cesmi_setup * ); int get_initial ( const cesmi_setup *, int, cesmi_node * ); int get_successor ( const cesmi_setup *, int, cesmi_node, cesmi_node * ); uint64_t get_flags ( const cesmi_setup *, cesmi_node ); char *show_node ( const cesmi_setup *, cesmi_node ); char *show_transition ( const cesmi_setup *, cesmi_node, int ); #ifdef __cplusplus } #endif #endif