inline Symbol Operator::CreateSymbol(const std::string &name) { if (input_keys_.size() > 0) { CHECK_EQ(input_keys_.size(), input_symbols_.size()); } const char *pname = name == "" ? nullptr : name.c_str(); SymbolHandle symbol_handle; std::vector<const char *> input_keys; std::vector<const char *> param_keys; std::vector<const char *> param_values; for (auto &data : params_) { param_keys.push_back(data.first.c_str()); param_values.push_back(data.second.c_str()); } for (auto &data : this->input_keys_) { input_keys.push_back(data.c_str()); } const char **input_keys_p = (input_keys.size() > 0) ? input_keys.data() : nullptr; MXSymbolCreateAtomicSymbol(handle_, param_keys.size(), param_keys.data(), param_values.data(), &symbol_handle); MXSymbolCompose(symbol_handle, pname, input_symbols_.size(), input_keys_p, input_symbols_.data()); return Symbol(symbol_handle); }
inline Symbol::Symbol(const std::string &operator_name, const std::string &name, std::vector<const char *> input_keys, std::vector<SymbolHandle> input_values, std::vector<const char *> config_keys, std::vector<const char *> config_values) { SymbolHandle handle; AtomicSymbolCreator creator = op_map()->GetSymbolCreator(operator_name); MXSymbolCreateAtomicSymbol(creator, config_keys.size(), config_keys.data(), config_values.data(), &handle); MXSymbolCompose(handle, operator_name.c_str(), input_keys.size(), input_keys.data(), input_values.data()); blob_ptr_ = std::make_shared<SymBlob>(handle); }