You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

operator.cc 1.9 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. extern "C"
  2. {
  3. #include "../../../apis/c/operator/operator_api.h"
  4. }
  5. #include <memory>
  6. #include <iostream>
  7. #include <vector>
  8. #include <string.h>
  9. #include <cassert>
  10. class Operator
  11. {
  12. public:
  13. Operator();
  14. };
  15. Operator::Operator() {}
  16. extern "C" DoraInitResult_t dora_init_operator()
  17. {
  18. Operator *op = std::make_unique<Operator>().release();
  19. DoraInitResult_t result = {.operator_context = (void *)op};
  20. return result;
  21. }
  22. extern "C" DoraResult_t dora_drop_operator(void *operator_context)
  23. {
  24. delete (Operator *)operator_context;
  25. return {};
  26. }
  27. extern "C" OnEventResult_t dora_on_event(
  28. RawEvent_t *event,
  29. const SendOutput_t *send_output,
  30. void *operator_context)
  31. {
  32. if (event->input != NULL)
  33. {
  34. // input event
  35. Input_t *input = event->input;
  36. char *id = dora_read_input_id(input);
  37. Vec_uint8_t data = dora_read_data(input);
  38. assert(data.ptr != NULL);
  39. std::cout
  40. << "C++ Operator (C-API) received input `" << id << "` with data: [";
  41. for (int i = 0; i < data.len; i++)
  42. {
  43. std::cout << (unsigned int)data.ptr[i] << ", ";
  44. }
  45. std::cout << "]" << std::endl;
  46. const char *out_id = "half-status";
  47. char *out_id_heap = strdup(out_id);
  48. size_t out_data_len = 1;
  49. uint8_t *out_data_heap = (uint8_t *)malloc(out_data_len);
  50. *out_data_heap = *data.ptr / 2;
  51. DoraResult_t send_result = dora_send_operator_output(send_output, out_id_heap, out_data_heap, out_data_len);
  52. OnEventResult_t result = {.result = send_result, .status = DORA_STATUS_CONTINUE};
  53. dora_free_data(data);
  54. dora_free_input_id(id);
  55. return result;
  56. }
  57. if (event->stop)
  58. {
  59. printf("C operator received stop event\n");
  60. }
  61. OnEventResult_t result = {.status = DORA_STATUS_CONTINUE};
  62. return result;
  63. }