#2380 AppFwk: Take vector<T*>* as argument, not vector<PdmField<T*>>*

This commit is contained in:
Rebecca Cox 2018-01-19 08:02:09 +01:00
parent b84812616f
commit ed930da11d

View File

@ -16,27 +16,36 @@
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
template <typename T> template <typename T>
void fieldByType(caf::PdmObjectHandle* object, std::vector< caf::PdmField<T>* >* typedFields) void fieldsByType(caf::PdmObjectHandle* object, std::vector<T*>* typedFields)
{ {
if (!typedFields) return; if (!typedFields) return;
if (!object) return; if (!object) return;
std::vector<caf::PdmFieldHandle*> fields; std::vector<caf::PdmFieldHandle*> allFieldsInObject;
object->fields(fields); object->fields(allFieldsInObject);
std::vector<caf::PdmObjectHandle*> children; std::vector<caf::PdmObjectHandle*> children;
for (const auto& field : fields) for (const auto& field : allFieldsInObject)
{ {
caf::PdmField<T>* typedField = dynamic_cast<caf::PdmField<T>*>(field); caf::PdmField<T>* typedField = dynamic_cast<caf::PdmField<T>*>(field);
if (typedField) typedFields->push_back(typedField); if (typedField) typedFields->push_back(&typedField->v());
caf::PdmField< std::vector<T> >* typedFieldInVector = dynamic_cast<caf::PdmField< std::vector<T> >*>(field);
if (typedFieldInVector)
{
for (T& typedFieldFromVector : typedFieldInVector->v())
{
typedFields->push_back(&typedFieldFromVector);
}
}
field->childObjects(&children); field->childObjects(&children);
} }
for (const auto& child : children) for (const auto& child : children)
{ {
fieldByType(child, typedFields); fieldsByType(child, typedFields);
} }
} }
@ -54,15 +63,12 @@ TEST(RimRelocatePathTest, findPathsInProjectFile)
project.fileName = fileName; project.fileName = fileName;
project.readFile(); project.readFile();
std::vector< caf::PdmField<std::vector<caf::FilePath>>* > filePathsVectors; std::vector< caf::FilePath* > filePaths;
fieldByType(&project, &filePathsVectors); fieldsByType(&project, &filePaths);
for (auto fpVec : filePathsVectors) for (auto filePath : filePaths)
{ {
for (auto fp : fpVec->v()) std::cout << filePath->path().toStdString() << std::endl;
{
std::cout << fp.path().toStdString() << std::endl;
}
} }
} }