#include "IoVMApi.h"

// Embedding callback function types

typedef void (IoStateBindingsInitCallback)(void *, void *);
typedef void (IoStatePrintCallback)(void *, size_t count, const char *);
typedef void (IoStateExceptionCallback)(void *, IoObject *);
typedef void (IoStateExitCallback)(void *, int);
typedef void (IoStateActiveCoroCallback)(void *, int);
typedef void (IoStateThreadLockCallback)(void *);
typedef void (IoStateThreadUnlockCallback)(void *);

// context

IOVM_API void IoState_callbackContext_(IoState *self, void *context);
IOVM_API void *IoState_callbackContext(IoState *self);

// bindings

IOVM_API void IoState_setBindingsInitCallback(IoState *self, IoStateBindingsInitCallback *callback);

// print

IOVM_API void IoState_print_(IoState *self, const char *format, ...);
IOVM_API void IoState_justPrint_(IoState *self, const size_t count, const char *s);
IOVM_API void IoState_justPrintln_(IoState *self);
IOVM_API void IoState_justPrintba_(IoState *self, ByteArray *ba);
IOVM_API void IoState_printCallback_(IoState *self, IoStatePrintCallback *callback);

// exceptions

IOVM_API void IoState_exceptionCallback_(IoState *self, IoStateExceptionCallback *callback);
IOVM_API void IoState_exception_(IoState *self, IoObject *e);

// exit

IOVM_API void IoState_exitCallback_(IoState *self, IoStateExitCallback *callback);
IOVM_API void IoState_exit(IoState *self, int returnCode);

// coros - called when coro count changes

IOVM_API void IoState_activeCoroCallback_(IoState *self, IoStateActiveCoroCallback *callback);
IOVM_API void IoState_schedulerUpdate(IoState *self, int count);



syntax highlighted by Code2HTML, v. 0.9.1