| 1803 | }; |
| 1804 | |
| 1805 | void traverse_(IfcUtil::IfcBaseClass* instance, std::set<IfcUtil::IfcBaseClass*>& visited, traversal_recorder& list, int level, int max_level) { |
| 1806 | if (visited.find(instance) != visited.end()) { |
| 1807 | return; |
| 1808 | } |
| 1809 | visited.insert(instance); |
| 1810 | list.push_back(level, instance); |
| 1811 | |
| 1812 | if (level >= max_level && max_level > 0) { |
| 1813 | return; |
| 1814 | } |
| 1815 | |
| 1816 | traversal_visitor visit(visited, list, level + 1, max_level); |
| 1817 | apply_individual_instance_visitor(instance).apply(visit); |
| 1818 | } |
| 1819 | |
| 1820 | void traversal_visitor::operator()(IfcUtil::IfcBaseClass* inst, int /* index */) { |
| 1821 | traverse_(inst, visited_, list_, level_, max_level_); |