12 #include <framework/logging/Logger.h>
35 template<
class ContainerType,
class NodeType,
class NeighbourContainerType>
36 class NodeFamilyDefiner {
45 short currentFamily = 0;
46 for (NodeType* aNode : aNetwork) {
47 if (aNode->getFamily() != -1) {
51 aNode->setFamily(currentFamily);
53 NeighbourContainerType& innerNeighbours = aNode->getInnerNodes();
54 NeighbourContainerType& outerNeighbours = aNode->getOuterNodes();
55 NeighbourContainerType neighbours;
56 neighbours.reserve(innerNeighbours.size() + outerNeighbours.size());
57 neighbours.insert(neighbours.end(), innerNeighbours.begin(), innerNeighbours.end());
58 neighbours.insert(neighbours.end(), outerNeighbours.begin(), outerNeighbours.end());
60 while (neighbours.size() != 0) {
61 neighbours =
markNodes(currentFamily, neighbours);
70 NeighbourContainerType
markNodes(
short family, NeighbourContainerType& neighbours)
72 NeighbourContainerType newNeighbours;
73 for (
auto& neighbour : neighbours) {
75 if (neighbour->getFamily() != -1) {
76 short tmpFamily = neighbour->getFamily();
77 if (tmpFamily != family) {
78 B2FATAL(
"Node already assigned to different family: " << family <<
", " << tmpFamily);
83 neighbour->setFamily(family);
84 NeighbourContainerType& innerNeighbours = neighbour->getInnerNodes();
85 NeighbourContainerType& outerNeighbours = neighbour->getOuterNodes();
86 newNeighbours.reserve(innerNeighbours.size() + outerNeighbours.size());
87 newNeighbours.insert(newNeighbours.end(), innerNeighbours.begin(), innerNeighbours.end());
88 newNeighbours.insert(newNeighbours.end(), outerNeighbours.begin(), outerNeighbours.end());