MCPcopy Create free account
hub / github.com/IfcOpenShell/IfcOpenShell / EdgeIterator

Class EdgeIterator

src/svgfill/src/graph_2d.h:447–514  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

445
446 // Edge iterator class
447 class EdgeIterator {
448 public:
449 typedef std::forward_iterator_tag iterator_category;
450 typedef Edge value_type;
451 typedef ptrdiff_t difference_type;
452 typedef const Edge* pointer;
453 typedef const Edge& reference;
454
455 EdgeIterator() : outer_it_(), inner_it_(), graph_(nullptr) {}
456 EdgeIterator(const Graph2D* graph, typename std::map<Point_2, std::set<Point_2>>::const_iterator outer_it)
457 : outer_it_(outer_it), graph_(graph) {
458 if (outer_it_ != graph_->adjacency_list.end()) {
459 inner_it_ = outer_it_->second.begin();
460 advance_to_valid();
461 }
462 }
463
464 reference operator*() const {
465 current_edge_ = Edge(outer_it_->first, *inner_it_);
466 return current_edge_;
467 }
468
469 pointer operator->() const {
470 current_edge_ = Edge(outer_it_->first, *inner_it_);
471 return &current_edge_;
472 }
473
474 EdgeIterator& operator++() {
475 ++inner_it_;
476 advance_to_valid();
477 return *this;
478 }
479
480 EdgeIterator operator++(int) {
481 EdgeIterator tmp = *this;
482 ++(*this);
483 return tmp;
484 }
485
486 bool operator==(const EdgeIterator& other) const {
487 return outer_it_ == other.outer_it_ && (outer_it_ == graph_->adjacency_list.end() || inner_it_ == other.inner_it_);
488 }
489
490 bool operator!=(const EdgeIterator& other) const {
491 return !(*this == other);
492 }
493
494 private:
495 void advance_to_valid() {
496 while (outer_it_ != graph_->adjacency_list.end()) {
497 while (inner_it_ != outer_it_->second.end() && *inner_it_ < outer_it_->first) {
498 ++inner_it_;
499 }
500 if (inner_it_ != outer_it_->second.end()) {
501 break;
502 }
503 ++outer_it_;
504 if (outer_it_ != graph_->adjacency_list.end()) {

Callers 2

edges_beginMethod · 0.85
edges_endMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected