Exemple #1
0
void InfoWidget::SetDrawInfo(Draw *draw) {
	DrawInfo *info = draw->GetDrawInfo();
	if (info == NULL)
		return;
	SetUnit(info->GetUnit());
	SetColor(info->GetDrawColor());
	SetPrec(info->GetPrec());
	SetPeriod(draw->GetPeriod());
}
Exemple #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());
}
// ****************************************************************************
//  Constructor:  ExprGrammar::ExprGrammar
//
//  Programmer:  Jeremy Meredith
//  Creation:    April  5, 2002
//
// ****************************************************************************
ExprGrammar::ExprGrammar() : Grammar(D)
{
  // ----------------------------------------------------------------------

  // Start rule
  SetStartSymbol(Expr);

  // ----------------------------------------------------------------------

  // Expression
  AddRule(Rule(0,  Expr)  >>  (Expr + T_Plus  + Expr) );    // addition
  AddRule(Rule(1,  Expr)  >>  (Expr + T_Minus + Expr) );    // subtraction
  AddRule(Rule(2,  Expr)  >>  (Expr + T_Mult  + Expr) );    // multiplication
  AddRule(Rule(3,  Expr)  >>  (Expr + T_Slash + Expr) );    // division
  AddRule(Rule(4,  Expr)  >>  (Expr + T_Exp   + Expr) );    // exponentiation
  AddRule(Rule(5,  Expr)  >>  (Expr + T_Mod   + Expr) );    // modulo
  AddRule(Rule(15, Expr)  >>  (Expr + T_And   + Expr) );    // bitwise and 
  AddRule(Rule(6,  Expr)  >>  (Expr + T_LBracket + T_Integer + T_RBracket) );    // index
  AddRule(Rule(7,  Expr)  >>  (T_Minus + Expr),  5);      // u-negative, prec=5
  AddRule(Rule(8,  Expr)  >>  (T_LParen + Expr + T_RParen) );
  AddRule(Rule(9,  Expr)  >>  Constant );
  AddRule(Rule(10, Expr)  >>  Vector   );
  AddRule(Rule(11, Expr)  >>  Function );
  AddRule(Rule(12, Expr)  >>  Variable );
  AddRule(Rule(13, Expr)  >>  Database );
  //AddRule(Rule(14, Expr)  >>  List     );

  // Constant
  AddRule(Rule(0, Constant)  >>  T_Integer );
  AddRule(Rule(1, Constant)  >>  T_Float   );
  AddRule(Rule(2, Constant)  >>  T_String  );
  AddRule(Rule(3, Constant)  >>  T_Bool    );

  // Vector
  AddRule(Rule(0, Vector) >> (T_LBrace + Expr + T_Comma + Expr + T_RBrace));
  AddRule(Rule(1, Vector) >> (T_LBrace + Expr + T_Comma + Expr + T_Comma + Expr + T_RBrace));

  // List
  AddRule(Rule(0, List)      >> (T_LBracket + ListElems + T_RBracket));

  // ListElems
  AddRule(Rule(0, ListElems) >>  (ListElems + T_Comma + ListElem));
  AddRule(Rule(1, ListElems) >>  ListElem);

  // ListElem
  AddRule(Rule(0, ListElem)  >>  Expr);
  AddRule(Rule(1, ListElem)  >>  (Expr + T_Colon + Expr));
  AddRule(Rule(2, ListElem)  >>  (Expr + T_Colon + Expr + T_Colon + Expr));

  // Function
  AddRule(Rule(0, Function)  >>  (T_Ident + T_LParen + T_RParen));
  AddRule(Rule(1, Function)  >>  (T_Ident + T_LParen + Args + T_RParen));

  // Args
  AddRule(Rule(0, Args)     >> (Args + T_Comma + Arg));
  AddRule(Rule(1, Args)     >> Arg);

  // Arg
  AddRule(Rule(0, Arg)      >> Expr);
  AddRule(Rule(1, Arg)      >> (T_Ident + T_Equal + Expr));
  AddRule(Rule(2, Arg)      >> List);

  // PathSpec
  AddRule(Rule(0, PathSpec) >> (PathSpec + MultiSlash + T_Ident));
  AddRule(Rule(1, PathSpec) >> (MultiSlash + T_Ident));
  AddRule(Rule(2, PathSpec) >> T_Ident);

  // MultiSlash
  AddRule(Rule(0, MultiSlash) >> (MultiSlash + T_Slash));
  AddRule(Rule(1, MultiSlash) >> T_Slash);
  AddRule(Rule(2, MultiSlash) >> (MultiSlash + T_BackSlash));
  AddRule(Rule(3, MultiSlash) >> T_BackSlash);

  // Variable
  AddRule(Rule(0, Variable) >> T_Ident );
  AddRule(Rule(1, Variable) >> (T_LCarat + PathSpec + T_RCarat) );
  AddRule(Rule(2, Variable) >> (T_LCarat + DBSpec + T_Colon + PathSpec + T_RCarat) );

  // Database
  AddRule(Rule(0, Database) >> (T_LCarat + DBSpec + T_Colon + T_RCarat) );

  // DBSpec
  AddRule(Rule(0, DBSpec)   >> PathSpec );
  AddRule(Rule(1, DBSpec)   >> (PathSpec + MachSpec));
  AddRule(Rule(2, DBSpec)   >> TimeSpec );
  AddRule(Rule(3, DBSpec)   >> (PathSpec + TimeSpec) );
  AddRule(Rule(4, DBSpec)   >> (PathSpec + MachSpec + TimeSpec) );

  // MachSpec
  AddRule(Rule(0, MachSpec) >> (T_At + T_Ident) );

  // TimeSpec
  AddRule(Rule(0, TimeSpec) >> (T_LBracket + ListElems + T_RBracket + T_Ident));
  AddRule(Rule(1, TimeSpec) >> (T_LBracket + ListElems + T_RBracket));
  AddRule(Rule(2, TimeSpec) >> (T_LBracket + T_Pound + ListElems + T_RBracket));

  // ----------------------------------------------------------------------

  // -- associativity --
  SetAssoc(T_Mod,   Grammar::NonAssoc);
  SetAssoc(T_Plus,  Grammar::Left);
  SetAssoc(T_Minus, Grammar::Left);
  SetAssoc(T_Mult,  Grammar::Left);
  SetAssoc(T_Slash, Grammar::Left);
  SetAssoc(T_Exp,   Grammar::Right);
  SetAssoc(T_And,   Grammar::NonAssoc);

  // -- precedence --
  SetPrec(T_Mod,    1);
  SetPrec(T_Plus,   2);
  SetPrec(T_Minus,  2);
  SetPrec(T_Mult,   3);
  SetPrec(T_Slash,  3);
  SetPrec(T_Exp,    4);
  SetPrec(T_And,    4);
  // Unary minus is 5  -- see rule above
  SetPrec(T_LBracket, 6);
}