void location_connection::add_param(const std::string& base, TParam* param, IksCmdCallback callback) { auto name = param->GetName(); std::vector<std::wstring> strings; auto formula = SC::U2S(param->GetLuaScript()); extract_strings_from_formula(formula, strings); for (auto& string : strings) { if (std::count(string.begin(), string.end(), L':') != 3) continue; auto i = formula.find( SC::U2S( (unsigned char *) m_defined_param_prefix.c_str() ) ); if (i == std::wstring::npos) continue; formula = formula.substr(0, i) + L'*' + formula.substr(i); } boost::property_tree::ptree out; out.put( "base" , base ); out.put( "prec" , param->GetPrec() ); out.put( "formula" , (const char*) SC::S2U(formula).c_str() ); out.put( "type" , (param->GetFormulaType() == TParam::LUA_AV) ? "av" : "va" ); out.put( "start_time" , param->GetLuaStartDateTime() ); std::stringstream data; data << "\"" << SC::S2U(param->GetName()) << "\" " << ptree_to_json(out); m_connection->send_command("add_param", data.str(), callback); }
std::string SzbaseWrapper::add_param( const std::string& param , const std::string& base , const std::string& formula , const std::string& token , const std::string& type , int prec , unsigned start_time) throw( szbase_invalid_name , szbase_formula_invalid_syntax, szbase_init_error ) { if( !SzbaseWrapper::is_initialized() ) throw szbase_init_error("Szbase not initialized"); std::wstring _param = convert_string( param ); std::wstring _token = convert_string( token ); std::wstring _formula = convert_string( formula ); std::wstring new_param_name; if ( !create_param_name( _param , _token , new_param_name ) ) throw szbase_invalid_name(param + " in not valid user defined param name"); std::vector<std::wstring> strings; if( !extract_strings_from_formula( _formula , strings ) ) throw szbase_formula_invalid_syntax("formula cannot be parsed"); for( auto& param : strings ) { std::wstring new_name; if ( !create_param_name_in_formula( param , _token , new_name ) ) continue; auto i = _formula.find( param ); assert( i != std::wstring::npos ); _formula.replace( i , param.size() , new_name ); } TParam::FormulaType formula_type; if( type == "av" ) formula_type = TParam::LUA_AV; else if( type == "va" ) formula_type = TParam::LUA_VA; auto tparam = new TParam(NULL, NULL, L"", formula_type, TParam::P_LUA); tparam->SetName(new_param_name); tparam->SetPrec(prec); tparam->SetTimeType(TParam::NANOSECOND); ///XXX: tparam->SetLuaScript(SC::S2U(_formula).c_str()); tparam->SetLuaStartDateTime(start_time); IPKContainer::GetObject()->AddExtraParam( convert_string ( base ) , tparam ); return reinterpret_cast<const char*>(SC::S2U(new_param_name).c_str()); }