本文整理汇总了C++中IPrimitive::getPropertyByName方法的典型用法代码示例。如果您正苦于以下问题:C++ IPrimitive::getPropertyByName方法的具体用法?C++ IPrimitive::getPropertyByName怎么用?C++ IPrimitive::getPropertyByName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IPrimitive
的用法示例。
在下文中一共展示了IPrimitive::getPropertyByName方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: selectPrimByPath
void selectPrimByPath(IPrimitive *rootNode, const std::string &path, TPrimitiveSet &result)
{
std::vector<std::string> parts;
NLMISC::explode(path, std::string("."), parts, false);
// IPrimitive * tmpChild;
result.clear();
if (parts.empty())
return;
// handle a special case
if (parts.size() > 1 && parts[1] == "primitive")
{
parts[0] += ".primitive";
parts.erase(parts.begin()+1);
}
TPrimitiveSet candidats, nextStep;
candidats.push_back(rootNode);
// check root validity
std::string name;
rootNode->getPropertyByName("name", name);
if (name != parts.front())
return;
for (uint i=1; i<parts.size(); ++i)
{
for (uint j=0; j<candidats.size(); ++j)
{
for (uint k=0; k<candidats[j]->getNumChildren(); ++k)
{
std::string name;
IPrimitive *child;
candidats[j]->getChild(child, k);
child->getPropertyByName("name", name);
if (name == parts[i])
{
nextStep.push_back(child);
}
}
}
candidats.swap(nextStep);
nextStep.clear();
}
result.swap(candidats);
// for (uint i=0; i<parts.size(); ++i)
// {
// for (uint j=0; j<candidats.size(); ++j)
// {
// std::string tmpName;
// std::vector<std::string> name;
// candidats[j]->getPropertyByName("name", tmpName);
// NLMISC::explode(tmpName,".",name);
//
// bool test=false;
// for(uint k=0;k<name.size();k++)
// {
// if (name.at(k)==parts[i+k])
// test=true;
// else
// {
// test=false;
// break;
// }
// }
// if (test)
// {
// if (i == parts.size()-1)
// {
// }
// else
// {
// for(uint k=0;k<candidats[j]->getNumChildren();k++)
// {
// candidats[j]->getChild(tmpChild,k);
// nextStep.push_back(tmpChild);
// }
// }
//// result.clear();
//// result.push_back(candidats[j]);
// i+=name.size()-1;
// break;
// }
//
// }
//
// candidats.swap(nextStep);
// nextStep.clear();
//
// if (candidats.empty())
// return;
// }
//.........这里部分代码省略.........
示例2:
bool CPrimitiveClass::CParameter::translateAutoname (std::string &result, const IPrimitive &primitive, const CPrimitiveClass &primitiveClass) const
{
result = "";
string::size_type strBegin = 0;
string::size_type strEnd = 0;
while (strBegin != Autoname.size())
{
strEnd = Autoname.find ('$', strBegin);
if (strEnd == string::npos)
{
strEnd = Autoname.size();
result += Autoname.substr (strBegin, strEnd-strBegin);
}
else
{
// Copy the remaining string
result += Autoname.substr (strBegin, strEnd-strBegin);
if (strEnd != Autoname.size())
{
strBegin = strEnd+1;
strEnd = Autoname.find ('$', strBegin);
if (strEnd == string::npos)
strEnd = Autoname.size();
else
{
string keyWord = Autoname.substr (strBegin, strEnd-strBegin);
// Loop for the parameter
uint i;
for (i=0; i<primitiveClass.Parameters.size (); i++)
{
if (primitiveClass.Parameters[i].Name == keyWord)
{
// Get its string value
string str;
const IProperty *prop;
if (primitive.getPropertyByName (keyWord.c_str(), prop))
{
// The property has been found ?
if (prop)
{
// Array or string ?
const CPropertyString *_string = dynamic_cast<const CPropertyString *>(prop);
// Is a string ?
if (_string)
{
if (!(_string->String.empty()))
{
result += _string->String;
break;
}
}
else
{
// Try an array
const CPropertyStringArray *array = dynamic_cast<const CPropertyStringArray *>(prop);
// Is an array ?
if (array)
{
if (!(array->StringArray.empty()))
{
uint i;
for (i=0; i<array->StringArray.size()-1; i++)
result += array->StringArray[i] + "\n";
result += array->StringArray[i];
break;
}
}
}
}
}
// Get its default value
std::string result2;
if (primitiveClass.Parameters[i].getDefaultValue (result2, primitive, primitiveClass))
{
result += result2;
break;
}
}
}
strEnd++;
}
}
}
strBegin = strEnd;
}
return true;
}