dust3d/thirdparty/cgal/CGAL-5.1/include/CGAL/boost/graph/graph_concepts.h

198 lines
4.9 KiB
C++

// Copyright (c) 2014 GeometryFactory (France). All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL: https://github.com/CGAL/cgal/blob/v5.1/BGL/include/CGAL/boost/graph/graph_concepts.h $
// $Id: graph_concepts.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
//
//
// Author(s) : Philipp Moeller
#ifndef CGAL_GRAPH_CONCEPTS_H
#define CGAL_GRAPH_CONCEPTS_H
#include <boost/graph/graph_concepts.hpp>
#include <boost/concept/detail/concept_def.hpp>
namespace CGAL {
namespace concepts {
BOOST_concept(HalfedgeGraph,(G))
: boost::concepts::Graph<G>
{
typedef typename boost::graph_traits<G>::halfedge_descriptor halfedge_descriptor;
BOOST_CONCEPT_USAGE(HalfedgeGraph)
{
BOOST_CONCEPT_ASSERT((boost::DefaultConstructible<halfedge_descriptor>)) CGAL_UNUSED;
BOOST_CONCEPT_ASSERT((boost::EqualityComparable<halfedge_descriptor>)) CGAL_UNUSED;
BOOST_CONCEPT_ASSERT((boost::Assignable<halfedge_descriptor>)) CGAL_UNUSED;
e = edge(h, g);
h = halfedge(e, g);
h = halfedge(v, g);
hp = halfedge(u, v, g);
h = opposite(h, g);
v = source(h, g);
v = target(h, g);
h = next(h, g);
h = prev(h, g);
const_constraints(g);
}
void const_constraints(const G& cg)
{
e = edge(h, cg);
h = halfedge(e, cg);
h = halfedge(v, cg);
hp = halfedge(u, v, cg);
h = opposite(h, cg);
v = source(h, cg);
v = target(h, cg);
h = next(h, cg);
h = prev(h, cg);
}
G g;
typename boost::graph_traits<G>::vertex_descriptor v, u;
typename boost::graph_traits<G>::edge_descriptor e;
typename boost::graph_traits<G>::halfedge_descriptor h;
std::pair<halfedge_descriptor, bool> hp;
};
BOOST_concept(HalfedgeListGraph,(G))
: HalfedgeGraph<G>
{
typedef typename boost::graph_traits<G>::halfedge_iterator halfedge_iterator;
typedef typename boost::graph_traits<G>::halfedges_size_type halfedges_size_type;
BOOST_CONCEPT_USAGE(HalfedgeListGraph)
{
// BOOST_CONCEPT_ASSERT((boost::BidirectionalIterator<halfedge_iterator>));
h_num = num_halfedges(g);
p = halfedges(g);
this->h = *p.first;
const_constraints(g);
}
void const_constraints(const G& cg)
{
h_num = num_halfedges(cg);
p = halfedges(cg);
this->h = *p.first;
}
G g;
halfedges_size_type h_num;
std::pair<halfedge_iterator, halfedge_iterator> p;
};
BOOST_concept(FaceGraph,(G))
: HalfedgeGraph<G>
{
typedef typename boost::graph_traits<G>::face_descriptor face_descriptor;
BOOST_CONCEPT_USAGE(FaceGraph)
{
BOOST_CONCEPT_ASSERT((boost::DefaultConstructible<face_descriptor>)) CGAL_UNUSED;
BOOST_CONCEPT_ASSERT((boost::EqualityComparable<face_descriptor>)) CGAL_UNUSED;
BOOST_CONCEPT_ASSERT((boost::Assignable<face_descriptor>)) CGAL_UNUSED;
f = face(h, g);
h = halfedge(f, g);
boost::graph_traits<G>::null_face();
const_constraints(g);
}
void const_constraints(const G& cg)
{
f = face(h, cg);
h = halfedge(f, cg);
}
G g;
face_descriptor f;
typename boost::graph_traits<G>::halfedge_descriptor h;
};
BOOST_concept(FaceListGraph,(G))
: FaceGraph<G>
{
typedef typename boost::graph_traits<G>::face_iterator face_iterator;
typedef typename boost::graph_traits<G>::faces_size_type faces_size_type;
BOOST_CONCEPT_USAGE(FaceListGraph)
{
// BOOST_CONCEPT_ASSERT((boost::BidirectionalIterator<face_iterator>));
p = faces(g);
nf = num_faces(g);
this->f = *p.first;
const_constraints(g);
}
void const_constraints(const G& cg)
{
p = faces(cg);
nf = num_faces(cg);
this->f = *p.first;
}
G g;
std::pair<face_iterator, face_iterator> p;
typename boost::graph_traits<G>::faces_size_type nf;
};
BOOST_concept(MutableFaceGraph,(G))
: FaceGraph<G>
{
BOOST_CONCEPT_USAGE(MutableFaceGraph)
{
f = add_face(g);
remove_face(f, g);
set_face(h, f, g);
set_halfedge(f, h, g);
int i=33;
reserve(g, i, i, i);
}
G g;
typename boost::graph_traits<G>::face_descriptor f;
typename boost::graph_traits<G>::halfedge_descriptor h;
};
BOOST_concept(MutableHalfedgeGraph,(G))
: HalfedgeGraph<G>
{
BOOST_CONCEPT_USAGE(MutableHalfedgeGraph)
{
v = add_vertex(g);
remove_vertex(v, g);
e = add_edge(g);
remove_edge(e, g);
set_target(h1, v, g);
set_next(h1, h2, g);
set_halfedge(v, h1, g);
}
G g;
typename boost::graph_traits<G>::edge_descriptor e;
typename boost::graph_traits<G>::vertex_descriptor v;
typename boost::graph_traits<G>::halfedge_descriptor h1, h2;
};
} // concepts
using CGAL::concepts::HalfedgeGraphConcept;
using CGAL::concepts::HalfedgeListGraphConcept;
using CGAL::concepts::FaceGraphConcept;
using CGAL::concepts::FaceListGraphConcept;
using CGAL::concepts::MutableFaceGraphConcept;
using CGAL::concepts::MutableHalfedgeGraphConcept;
} // CGAL
#include <boost/concept/detail/concept_undef.hpp>
#endif /* CGAL_GRAPH_CONCEPTS_H */