本文整理汇总了C++中mu::Parser类的典型用法代码示例。如果您正苦于以下问题:C++ Parser类的具体用法?C++ Parser怎么用?C++ Parser使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Parser类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: st
void ParserMgr::AssociateVars(mu::Parser& parser)
{
#ifdef DEBUG_PM_FUNC
ScopeTracker st("ParserMgr::AssociateVars", std::this_thread::get_id());
#endif
try
{
for (size_t i=0; i<ds::NUM_MODELS; ++i)
{
const ParamModelBase* model = _modelMgr->Model((ds::PMODEL)i);
if (model->Id()==ds::INIT || model->Id()==ds::COND) continue;
double* data = _modelData[i].first,
* temp_data = _modelData[i].second;
const size_t num_pars = model->NumPars();
for (size_t j=0; j<num_pars; ++j)
{
const std::string& key = model->ShortKey(j);
parser.DefineVar(key, &data[j]);
if (model->DoEvaluate())
parser.DefineVar(model->TempKey(j), &temp_data[j]);
}
}
}
catch (mu::ParserError& e)
{
_log->AddExcept("ParserMgr::AssociateVars: " + AnnotateErrMsg(e.GetMsg(), parser));
}
}
示例2: addSBMLFunctions
static void addSBMLFunctions(mu::Parser & p)
{
p.DefineFun("pow", &power , false);
p.DefineFun("ge", &ge , false);
p.DefineFun("gt", > , false);
p.DefineFun("le", &le , false);
p.DefineFun("lt", < , false);
}
示例3: catch
/**
* Calculate the value of a formula parsed by muParser
* @param parser :: muParser object
* @return calculated value
* @throw InstrumentDefinitionError if parser throws during evaluation
*/
double DetectorEfficiencyCorUser::evaluate(const mu::Parser &parser) const {
try {
return parser.Eval();
} catch (mu::Parser::exception_type &e) {
throw Kernel::Exception::InstrumentDefinitionError(
"Error calculating formula from string. Muparser error message is: " +
e.GetMsg());
}
}
示例4: CheckKeywords
/** \brief Check for external keywords.
*/
int CheckKeywords(const mu::char_type *a_szLine, mu::Parser &a_Parser)
{
string_type sLine(a_szLine);
if ( sLine == _T("quit") )
{
return -1;
}
else if ( sLine == _T("list var") )
{
ListVar(a_Parser);
return 1;
}
else if ( sLine == _T("list const") )
{
ListConst(a_Parser);
return 1;
}
else if ( sLine == _T("list exprvar") )
{
ListExprVar(a_Parser);
return 1;
}
else if ( sLine == _T("list const") )
{
ListConst(a_Parser);
return 1;
}
else if ( sLine == _T("locale de") )
{
mu::console() << _T("Setting german locale: ArgSep=';' DecSep=',' ThousandsSep='.'\n");
a_Parser.SetArgSep(';');
a_Parser.SetDecSep(',');
a_Parser.SetThousandsSep('.');
return 1;
}
else if ( sLine == _T("locale en") )
{
mu::console() << _T("Setting english locale: ArgSep=',' DecSep='.' ThousandsSep=''\n");
a_Parser.SetArgSep(',');
a_Parser.SetDecSep('.');
a_Parser.SetThousandsSep();
return 1;
}
else if ( sLine == _T("locale reset") )
{
mu::console() << _T("Resetting locale\n");
a_Parser.ResetLocale();
return 1;
}
return 0;
}
示例5: iiter
/// Calculate emission time for a given detector (L1, t2)
/// and TOF when Emode==Elastic
double ModeratorTzero::CalculateT0elastic(const double &tof, const double &L12,
double &E1, mu::Parser &parser) {
double t0_curr, t0_next;
t0_curr = m_tolTOF; // current iteration emission time
t0_next = 0.0; // next iteration emission time, initialized to zero
size_t iiter(0); // current iteration number
// iterate until convergence in t0 reached
while (std::fabs(t0_curr - t0_next) >= m_tolTOF && iiter < m_niter) {
t0_curr = t0_next;
double v1 = L12 / (tof - t0_curr); // v1 = v2 = v since emode is elastic
E1 = m_convfactor * v1 * v1; // Energy in meV if v1 in meter/microsecond
t0_next = parser.Eval();
iiter++;
}
return t0_next;
}
示例6: AnnotateErrMsg
std::string ParserMgr::AnnotateErrMsg(const std::string& err_mesg, const mu::Parser& parser) const
{
#ifdef DEBUG_PM_FUNC
ScopeTracker st("ParserMgr::AnnotateErrMsg", std::this_thread::get_id());
#endif
const char* pos_str = "position ";
size_t pos = err_mesg.find(pos_str);
if (pos!=std::string::npos)
{
size_t spc = err_mesg.find_first_of(' ', pos);
std::string s = err_mesg.substr(spc);
int errpos = std::stoi(s);
std::string pstr = parser.GetExpr();
std::string small = "..." + pstr.substr(errpos, 20) + "...";
return err_mesg + " " + small;
}
return err_mesg;
}
示例7: outpre
int Network3::run_PLA(double& time, double maxTime, double sampleTime,
double& step, double maxStep, double stepInterval,
mu::Parser& stop_condition, bool print_on_stop,
char* prefix,
bool print_cdat, bool print_func, bool print_save_net, bool print_end_net,
bool additional_pla_output,
bool verbose){
// Output files
string outpre(prefix);
bool print_classif = additional_pla_output;
// ...
// Species file (must exist)
FILE* cdat = NULL;
string cFile = outpre + ".cdat";
if ((cdat = fopen(cFile.c_str(),"r"))){
fclose(cdat);
cdat = fopen(cFile.c_str(),"a");
}
else {
cout << "Error in Network3::run_PLA(): Concentrations file \"" << cFile << "\" doesn't exist. Exiting." << endl;
exit(1);
}
// Observables file (optional)
FILE* gdat = NULL;
string gFile = outpre + ".gdat";
if ((gdat = fopen(gFile.c_str(),"r"))){
fclose(gdat);
gdat = fopen(gFile.c_str(),"a");
}
else{
// cout << "Warning: Groups file \"" << gFile << "\" doesn't exist." << endl;
}
// Functions file (optional)
/* FILE* fdat = NULL;
string fFile = outpre + ".fdat";
if ((fdat = fopen(fFile.c_str(),"r"))){
fclose(fdat);
fdat = fopen(fFile.c_str(),"a");
}
else{
// cout << "Warning: Functions file \"" << fFile << "\" doesn't exist." << endl;
}*/
// PLA-specific output files
FILE* classif = NULL;
if (print_classif){
if ((classif = fopen((outpre+"_classif.pla").c_str(),"r"))){
fclose(classif);
classif = fopen((outpre+"_classif.pla").c_str(),"a");
}
else{
cout << "Error in Network3::run_PLA(): 'print_classif' flag set but classifications file \""
<< (outpre+"_classif.pla") << "\" doesn't exist. Exiting." << endl;
exit(1);
}
}
// ...
// Identify observables involved in functions
vector<unsigned int> funcObs;
for (unsigned int i=0;i < FUNCTION.size();i++){
map<string,double*> var = FUNCTION[i]->first->p->GetUsedVar();
for (unsigned int j=0;j < OBSERVABLE.size();j++){
if (var.find(OBSERVABLE[j]->first->name) != var.end()){
bool already = false;
for (unsigned int k=0;k < funcObs.size() && !already;k++){
if (funcObs[k] == j){
already = true;
}
}
if (!already){ // add to the list
funcObs.push_back(j);
}
}
}
}
// Prepare for simulation
double nextOutputTime = time + sampleTime;
double nextOutputStep = stepInterval;
while (nextOutputStep <= step) nextOutputStep += stepInterval;
bool lastOut = true;
// Simulation loop
// PLA_SIM->rc.forceClassifications(RxnClassifier::EXACT_STOCHASTIC);
string print_net_message;
while (time < maxTime && step < maxStep && !stop_condition.Eval())
{
// Next step
step++;
PLA_SIM->nextStep();
if (PLA_SIM->tau < INFINITY && PLA_SIM->tau > -INFINITY){
time += PLA_SIM->tau;
}
else break;
//.........这里部分代码省略.........
示例8: init
//initialize muparser and graphics
void init() {
p.DefineVar("theta", &t);
p.DefineConst("pi", pi);
graph.create(size,size,sf::Color::Transparent);
graphTx.loadFromImage(graph);
graphSpr.setTexture(graphTx);
//center on screen
graphSpr.setOrigin(size/2,size/2);
graphSpr.setPosition(windowsize.x/2, windowsize.y/2);
}
示例9: animation
//plots draw_speed points per frame
void animation() {
// p.DefineVar("theta", &t);
for(int i = 0; (i < speed || speed == 0) && t <= tmax ; i++) {
t += tinc;
r = p.Eval();
plot();
}
}
示例10: speed
//constructor
Func(std::string tag,
int speed_in,
int line_width_in,
double tmax_in,
double tinc_in,
double rotation_in,
sf::Color color_in )
: speed( speed_in ),
line_width(line_width_in),
t (0),
tmax ( tmax_in ),
tinc ( tinc_in ),
rotation( rotation_in ),
color ( color_in )
{
p.DefineVar("theta", &t);
p.SetExpr(tag);
}
示例11:
VoxelOp( std::string expr ) {
parser.SetExpr( expr );
parser.DefineVar( std::string( "vox" ), &voxBuff );
parser.DefineVar( std::string( "pos_x" ), &posBuff[data::rowDim] );
parser.DefineVar( std::string( "pos_y" ), &posBuff[data::columnDim] );
parser.DefineVar( std::string( "pos_z" ), &posBuff[data::sliceDim] );
parser.DefineVar( std::string( "pos_t" ), &posBuff[data::timeDim] );
}
示例12: operator
bool operator()( double &vox, const isis::util::vector4<size_t>& pos ) {
voxBuff = vox; //using parser.DefineVar every time would slow down the evaluation
posBuff = pos;
vox = parser.Eval();
return true;
}