mana c api: return status from begin_run() and end_run()
This commit is contained in:
parent
a4f98c540e
commit
ab05cab596
4 changed files with 59 additions and 4 deletions
|
@ -33,13 +33,28 @@ extern "C"
|
||||||
size_t size_bytes;
|
size_t size_bytes;
|
||||||
} mana_offset_array_t;
|
} mana_offset_array_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
mana_status_ok,
|
||||||
|
mana_status_invalid_argument,
|
||||||
|
mana_status_internal_error,
|
||||||
|
} mana_status_code_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
mana_status_code_t code;
|
||||||
|
char message[256];
|
||||||
|
} mana_status_t;
|
||||||
|
|
||||||
#define MANA_DEFINE_PLUGIN_INIT(name) void *name(int plugin_argc, const char **plugin_argv)
|
#define MANA_DEFINE_PLUGIN_INIT(name) void *name(int plugin_argc, const char **plugin_argv)
|
||||||
|
|
||||||
#define MANA_DEFINE_PLUGIN_SHUTDOWN(name) void name(void *context)
|
#define MANA_DEFINE_PLUGIN_SHUTDOWN(name) void name(void *context)
|
||||||
|
|
||||||
#define MANA_DEFINE_PLUGIN_BEGIN_RUN(name) void name(void *context, const char *descriptor_json)
|
#define MANA_DEFINE_PLUGIN_BEGIN_RUN(name) \
|
||||||
|
mana_status_t name(void *context, const char *descriptor_json)
|
||||||
|
|
||||||
#define MANA_DEFINE_PLUGIN_END_RUN(name) void name(void *context, const char *descriptor_json)
|
#define MANA_DEFINE_PLUGIN_END_RUN(name) \
|
||||||
|
mana_status_t name(void *context, const char *descriptor_json)
|
||||||
|
|
||||||
#define MANA_DEFINE_PLUGIN_EVENT_DATA(name) \
|
#define MANA_DEFINE_PLUGIN_EVENT_DATA(name) \
|
||||||
void name(void *context, uint16_t eventIndex, mana_offset_array_t *arrays, size_t arrayCount, \
|
void name(void *context, uint16_t eventIndex, mana_offset_array_t *arrays, size_t arrayCount, \
|
||||||
|
|
|
@ -230,6 +230,16 @@ inline std::string to_string(const ManaSinkPerfProxy::Perf &perf)
|
||||||
totalHits, MiB, elapsed_s, hit_s, MiB_s);
|
totalHits, MiB, elapsed_s, hit_s, MiB_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct mana_c_error: public std::exception
|
||||||
|
{
|
||||||
|
mana_status_t status;
|
||||||
|
mana_c_error(const mana_status_t &status_)
|
||||||
|
: status(status_)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
const char *what() const noexcept override { return status.message; }
|
||||||
|
};
|
||||||
|
|
||||||
// wraps a mana_api.h mana_sink_plugin_t instance
|
// wraps a mana_api.h mana_sink_plugin_t instance
|
||||||
struct ManaCSink: public IManaSink
|
struct ManaCSink: public IManaSink
|
||||||
{
|
{
|
||||||
|
@ -248,17 +258,27 @@ struct ManaCSink: public IManaSink
|
||||||
|
|
||||||
void begin_run(const char *descriptor_json) override
|
void begin_run(const char *descriptor_json) override
|
||||||
{
|
{
|
||||||
plugin_.begin_run(context_, descriptor_json);
|
if (auto status = plugin_.begin_run(context_, descriptor_json);
|
||||||
|
status.code != mana_status_ok)
|
||||||
|
{
|
||||||
|
throw mana_c_error(status);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void end_run(const char *descriptor_json) override
|
void end_run(const char *descriptor_json) override
|
||||||
{
|
{
|
||||||
plugin_.end_run(context_, descriptor_json);
|
if (auto status = plugin_.end_run(context_, descriptor_json); status.code != mana_status_ok)
|
||||||
|
{
|
||||||
|
throw mana_c_error(status);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void process_event(uint16_t eventIndex, mana_offset_array_t *arrays, size_t arrayCount,
|
void process_event(uint16_t eventIndex, mana_offset_array_t *arrays, size_t arrayCount,
|
||||||
size_t totalBytes) override
|
size_t totalBytes) override
|
||||||
{
|
{
|
||||||
plugin_.process_event(context_, eventIndex, arrays, arrayCount, totalBytes);
|
plugin_.process_event(context_, eventIndex, arrays, arrayCount, totalBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_system_event(const uint32_t *data, size_t size) override
|
void process_system_event(const uint32_t *data, size_t size) override
|
||||||
{
|
{
|
||||||
plugin_.process_system_event(context_, data, size);
|
plugin_.process_system_event(context_, data, size);
|
||||||
|
|
|
@ -27,12 +27,20 @@ MANA_DEFINE_PLUGIN_BEGIN_RUN(begin_run)
|
||||||
log_info("begin_run: ctx=%p", context);
|
log_info("begin_run: ctx=%p", context);
|
||||||
/* pretty useless as the json needs to be parsed back into some c structure describing the input
|
/* pretty useless as the json needs to be parsed back into some c structure describing the input
|
||||||
*/
|
*/
|
||||||
|
mana_status_t result;
|
||||||
|
result.code = mana_status_ok;
|
||||||
|
strncpy(result.message, "ok", sizeof(result.message));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
MANA_DEFINE_PLUGIN_END_RUN(end_run)
|
MANA_DEFINE_PLUGIN_END_RUN(end_run)
|
||||||
{
|
{
|
||||||
(void)descriptor_json;
|
(void)descriptor_json;
|
||||||
log_info("end: ctx=%p", context);
|
log_info("end: ctx=%p", context);
|
||||||
|
mana_status_t result;
|
||||||
|
result.code = mana_status_ok;
|
||||||
|
strncpy(result.message, "ok", sizeof(result.message));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
MANA_DEFINE_PLUGIN_EVENT_DATA(process_event)
|
MANA_DEFINE_PLUGIN_EVENT_DATA(process_event)
|
||||||
|
|
|
@ -62,6 +62,12 @@ MANA_DEFINE_PLUGIN_BEGIN_RUN(begin_run)
|
||||||
auto &jEvent = jRun["events"][ei];
|
auto &jEvent = jRun["events"][ei];
|
||||||
ctx->eventBuffers[ei].resize(jEvent["outputs"].size());
|
ctx->eventBuffers[ei].resize(jEvent["outputs"].size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: check the above for errors and return a proper status
|
||||||
|
mana_status_t result;
|
||||||
|
result.code = mana_status_ok;
|
||||||
|
strncpy(result.message, "ok", sizeof(result.message));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
MANA_DEFINE_PLUGIN_END_RUN(end_run)
|
MANA_DEFINE_PLUGIN_END_RUN(end_run)
|
||||||
|
@ -69,6 +75,12 @@ MANA_DEFINE_PLUGIN_END_RUN(end_run)
|
||||||
log_info("end: ctx=%p", context);
|
log_info("end: ctx=%p", context);
|
||||||
auto ctx = reinterpret_cast<Context *>(context);
|
auto ctx = reinterpret_cast<Context *>(context);
|
||||||
ctx->py_end_run(descriptor_json);
|
ctx->py_end_run(descriptor_json);
|
||||||
|
|
||||||
|
// TODO: check the above for errors and return a proper status
|
||||||
|
mana_status_t result;
|
||||||
|
result.code = mana_status_ok;
|
||||||
|
strncpy(result.message, "ok", sizeof(result.message));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
MANA_DEFINE_PLUGIN_EVENT_DATA(process_event)
|
MANA_DEFINE_PLUGIN_EVENT_DATA(process_event)
|
||||||
|
|
Loading…
Reference in a new issue