mana c api: return status from begin_run() and end_run()

This commit is contained in:
Florian Lüke 2024-12-30 17:55:11 +01:00
parent a4f98c540e
commit ab05cab596
4 changed files with 59 additions and 4 deletions

View file

@ -33,13 +33,28 @@ extern "C"
size_t size_bytes;
} 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_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) \
void name(void *context, uint16_t eventIndex, mana_offset_array_t *arrays, size_t arrayCount, \

View file

@ -230,6 +230,16 @@ inline std::string to_string(const ManaSinkPerfProxy::Perf &perf)
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
struct ManaCSink: public IManaSink
{
@ -248,17 +258,27 @@ struct ManaCSink: public IManaSink
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
{
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,
size_t totalBytes) override
{
plugin_.process_event(context_, eventIndex, arrays, arrayCount, totalBytes);
}
void process_system_event(const uint32_t *data, size_t size) override
{
plugin_.process_system_event(context_, data, size);

View file

@ -27,12 +27,20 @@ MANA_DEFINE_PLUGIN_BEGIN_RUN(begin_run)
log_info("begin_run: ctx=%p", context);
/* 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)
{
(void)descriptor_json;
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)

View file

@ -62,6 +62,12 @@ MANA_DEFINE_PLUGIN_BEGIN_RUN(begin_run)
auto &jEvent = jRun["events"][ei];
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)
@ -69,6 +75,12 @@ MANA_DEFINE_PLUGIN_END_RUN(end_run)
log_info("end: ctx=%p", context);
auto ctx = reinterpret_cast<Context *>(context);
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)