| 378 | |
| 379 | #if MGB_ENABLE_JSON |
| 380 | std::shared_ptr<json::Value> OperatorNodeBase::to_json() const { |
| 381 | auto cvt_var_array = [](const VarNodeArray& arr) { |
| 382 | auto rst = json::Array::make(); |
| 383 | for (auto i : arr) |
| 384 | rst->add(json::String::make(i->id_str())); |
| 385 | return rst; |
| 386 | }; |
| 387 | |
| 388 | auto objptr = json::Object::make(); |
| 389 | auto&& obj = *objptr; |
| 390 | obj["node_type"] = json::String::make("operator"); |
| 391 | obj["id"] = json::String::make(id_str()); |
| 392 | obj["name"] = json::String::make(name()); |
| 393 | obj["type"] = json::String::make(dyn_typeinfo()->name); |
| 394 | obj["input"] = cvt_var_array(input()); |
| 395 | obj["output"] = cvt_var_array(output()); |
| 396 | obj["extra"] = to_json_extra_json; |
| 397 | |
| 398 | if (m_input_waiting_spec.valid()) { |
| 399 | auto wpair_ptr = json::Object::make(); |
| 400 | obj["waiting_spec"] = wpair_ptr; |
| 401 | |
| 402 | auto&& wpair = *wpair_ptr; |
| 403 | for (auto&& i : m_input_waiting_spec.val()) { |
| 404 | wpair[i.comp_node.to_string()] = |
| 405 | json::Object::make({{"dev_ready", cvt_var_array(i.dev_ready)}}); |
| 406 | } |
| 407 | } else { |
| 408 | obj["waiting_spec"] = json::Null::make(); |
| 409 | } |
| 410 | return objptr; |
| 411 | } |
| 412 | #endif |
| 413 | |
| 414 | /* ===================== OperatorNodeConfig ===================== */ |