コード例 #1
0
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);

}
コード例 #2
0
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());
}