/usr/include/boost/geometry/algorithms/detail
Edit: /usr/include/boost/geometry/algorithms/detail/tupled_output.hpp (19235B)
// Boost.Geometry
// Copyright (c) 2019-2020, Oracle and/or its affiliates.
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
// Licensed under the Boost Software License version 1.0.
// http://www.boost.org/users/license.html
#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TUPLED_OUTPUT_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TUPLED_OUTPUT_HPP
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace geometry
{
#ifndef DOXYGEN_NO_DETAIL
namespace detail
{
// true for any geometry
template
struct is_geometry
: boost::integral_constant
<
bool,
(! boost::is_void::type>::value)
>
{};
// true for multi-point, multi-linestring or multi-polygon
template
struct is_multi_geometry
: boost::is_base_of
<
geometry::multi_tag,
typename geometry::tag::type
>
{};
// true for point, linestring or polygon
template
struct is_multi_geometry_element
: boost::integral_constant
<
bool,
((boost::is_same::type, point_tag>::value)
|| (boost::is_same::type, linestring_tag>::value)
|| (boost::is_same::type, polygon_tag>::value))
>
{};
template
struct is_range_impl
{
typedef boost::type_traits::yes_type yes_type;
typedef boost::type_traits::no_type no_type;
template
static yes_type test(typename boost::range_iterator::type*);
template
static no_type test(...);
static const bool value = (sizeof(test(0)) == sizeof(yes_type));
};
// true if T is range (boost::range_iterator::type is defined)
template
struct is_range
: boost::integral_constant::value>
{};
template ::value>
struct is_tupled_output_element_base
: boost::integral_constant
{};
template
struct is_tupled_output_element_base
: boost::integral_constant
<
bool,
(is_multi_geometry::value
||
((! is_geometry::value)
&&
is_multi_geometry_element
<
typename boost::range_value::type
>::value))
>
{};
// true if T is a multi-geometry or is a range of points, linestrings or
// polygons
template
struct is_tupled_output_element
: is_tupled_output_element_base
{};
// true if Output is not a geometry (so e.g. tuple was not adapted to any
// concept) and at least one of the tuple elements is a multi-geometry or
// a range of points, linestrings or polygons
template
struct is_tupled_output_check
: boost::mpl::and_
<
boost::is_same::type, void>,
//geometry::tuples::exists_if