本文整理汇总了C++中ObjRef::useAnnoSet方法的典型用法代码示例。如果您正苦于以下问题:C++ ObjRef::useAnnoSet方法的具体用法?C++ ObjRef::useAnnoSet怎么用?C++ ObjRef::useAnnoSet使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ObjRef
的用法示例。
在下文中一共展示了ObjRef::useAnnoSet方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: generateCodeForModel
std::string generateCodeForModel(CellmlApiObjects* capi,
std::map<std::string, unsigned char>& variableTypes,
std::map<std::string, std::map<unsigned char, int> >& variableIndices,
int numberOfInputs, int numberOfStates)
{
std::stringstream code;
std::string codeString;
if (! (capi && capi->codeInformation))
{
std::cerr << "CellML Model Definition::generateCodeForModel: missing model implementation?" << std::endl;
return "";
}
// We need to regenerate the code information to make use of the flagged variables.
ObjRef<iface::cellml_services::CodeGeneratorBootstrap> cgb = CreateCodeGeneratorBootstrap();
ObjRef<iface::cellml_services::CodeGenerator> cg = cgb->createCodeGenerator();
// catch any exceptions from the CellML API
try
{
// annotate the source variables in the model with the code-names based on existing annotations
for (unsigned int i=0; i < capi->cevas->length(); i++)
{
ObjRef<iface::cellml_services::ConnectedVariableSet> cvs = capi->cevas->getVariableSet(i);
ObjRef<iface::cellml_api::CellMLVariable> sv = cvs->sourceVariable();
std::string currentId = getVariableUniqueId(sv);
std::map<std::string, unsigned char>::iterator typeit(variableTypes.find(currentId));
if (typeit != variableTypes.end())
{
std::wstringstream ename;
// here we assign an array and index based on the "primary" purpose of the variable. Later
// we will add in secondary purposes.
unsigned char vType = typeit->second;
if (vType & csim::StateType)
{
ename << L"CSIM_STATE[" << variableIndices[currentId][csim::StateType] << L"]";
}
else if (vType & csim::IndependentType)
{
// do nothing, but stop input and output annotations
}
else if (vType & csim::InputType)
{
ename << L"CSIM_INPUT[" << variableIndices[currentId][csim::InputType] << L"]";
}
else if (vType & csim::OutputType)
{
ename << L"CSIM_OUTPUT[" << variableIndices[currentId][csim::OutputType] << L"]";
}
capi->annotations->setStringAnnotation(sv, L"expression", ename.str());
if (vType & csim::StateType)
{
ename.str(L"");
ename.clear();
ename << L"CSIM_RATE[" << variableIndices[currentId][csim::StateType] << L"]";
capi->annotations->setStringAnnotation(sv, L"expression_d1", ename.str());
}
}
}
cg->useCeVAS(capi->cevas);
cg->useAnnoSet(capi->annotations);
ObjRef<iface::cellml_services::CodeInformation> cci = cg->generateCode(capi->model);
std::wstring m = cci->errorMessage();
if (m != L"")
{
std::cerr << "CellML Model Definition::generateCodeForModel: error generating code?" << std::endl;
return "";
}
iface::cellml_services::ModelConstraintLevel mcl = cci->constraintLevel();
if (mcl == iface::cellml_services::UNDERCONSTRAINED)
{
std::cerr << "Model is underconstrained" << std::endl;
return "";
}
else if (mcl == iface::cellml_services::OVERCONSTRAINED)
{
std::cerr << "Model is overconstrained" << std::endl;
return "";
}
else if (mcl == iface::cellml_services::UNSUITABLY_CONSTRAINED)
{
std::cerr << "Model is unsuitably constrained" << std::endl;
return "";
}
std::cout << "Model is correctly constrained" << std::endl;
// create the code in the format we know how to handle
code << "//#include <math.h>\n"
/* required functions */
<< "double fabs(double x);\n"
<< "double acos(double x);\n"
<< "double acosh(double x);\n"
<< "double atan(double x);\n"
<< "double atanh(double x);\n"
<< "double asin(double x);\n"
<< "double asinh(double x);\n"
<< "double acos(double x);\n"
<< "double acosh(double x);\n"
<< "double asin(double x);\n"
<< "double asinh(double x);\n"
<< "double atan(double x);\n"
<< "double atanh(double x);\n"
//.........这里部分代码省略.........