text: /**********************************************************************
   *
   * GEOS - Geometry Engine Open Source
   * http://geos.osgeo.org
   *
   * Copyright (C) 2019 Daniel Baston
   *
   * This is free software; you can redistribute and/or modify it under
   * the terms of the GNU Lesser General Licence as published
   * by the Free Software Foundation.
   * See the COPYING file for more information.
   *
   **********************************************************************/
  
  #ifndef GEOS_TRIANGULATE_QUADEDGE_QUADEDGEQUARTET_H
  #define GEOS_TRIANGULATE_QUADEDGE_QUADEDGEQUARTET_H
  
  #include <geos/triangulate/quadedge/QuadEdge.h>
  
  
  namespace geos {
  namespace triangulate {
  namespace quadedge {
  
  class GEOS_DLL QuadEdgeQuartet {
  
  public:
      QuadEdgeQuartet() : e{{QuadEdge(0), QuadEdge(1), QuadEdge(2), QuadEdge(3)}} {
          e[0].next = &(e[0]);
          e[1].next = &(e[3]);
          e[2].next = &(e[2]);
          e[3].next = &(e[1]);
      };
  
      static QuadEdge& makeEdge(const Vertex& o, const Vertex & d, std::deque<QuadEdgeQuartet> & edges) {
          edges.emplace_back();
          auto& qe = edges.back();
          qe.base().setOrig(o);
          qe.base().setDest(d);
  
          return qe.base();
      }
  
      QuadEdge& base() {
          return e[0];
      }
  
      const QuadEdge& base() const {
          return e[0];
      }
  
      void setVisited(bool status) {
          for (auto& edge : e) {
              edge.setVisited(status);
          }
      }
  
  private:
      std::array<QuadEdge, 4> e;
  };
  
  }
  }
  }
  
  
  #endif
  