// Boost.Geometry // Copyright (c) 2025 Siddharth Kumar, Roorkee, India. // Copyright (c) 2025 Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYHEDRAL_SURFACE_CONCEPT_HPP #define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYHEDRAL_SURFACE_CONCEPT_HPP #include #include #include #include #include #include #include #include namespace boost { namespace geometry { namespace concepts { template class PolyhedralSurface { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS using polygon_type = typename boost::range_value::type; BOOST_CONCEPT_ASSERT( (concepts::Polygon) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); BOOST_STATIC_ASSERT( (geometry::dimension::value == 3) ); BOOST_STATIC_ASSERT( (std::is_same, geometry::cartesian_tag>::value) ); public: BOOST_CONCEPT_USAGE(PolyhedralSurface) { Geometry* ps = 0; traits::clear::apply(*ps); traits::resize::apply(*ps, 0); // The concept should support the second version of push_back, using && polygon_type* poly = 0; traits::push_back::apply(*ps, std::move(*poly)); } #endif }; // polyhedral surface(constant version) template class ConstPolyhedralSurface { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS using polygon_type = typename boost::range_value::type; BOOST_CONCEPT_ASSERT( (concepts::ConstPolygon) ); BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); BOOST_STATIC_ASSERT( (geometry::dimension::value == 3) ); BOOST_STATIC_ASSERT( (std::is_same, geometry::cartesian_tag>::value) ); public: BOOST_CONCEPT_USAGE(ConstPolyhedralSurface) {} #endif }; template struct concept_type { using type = PolyhedralSurface; }; template struct concept_type { using type = ConstPolyhedralSurface; }; }}} // namespace boost::geometry::concepts #endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYHEDRAL_SURFACE_CONCEPT_HPP