// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// This file was modified by Oracle on 2017, 2018, 2019.
-// Modifications copyright (c) 2017-2019, Oracle and/or its affiliates.
+// This file was modified by Oracle on 2017-2020.
+// Modifications copyright (c) 2017-2020, Oracle and/or its affiliates.
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
#include <cstdlib>
#include <string>
+#include <type_traits>
#include <vector>
#include <boost/algorithm/string.hpp>
-#include <boost/mpl/find.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/is_same.hpp>
+#include <boost/tuple/tuple.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/condition.hpp>
+#include <boost/geometry/core/static_assert.hpp>
#include <boost/geometry/srs/projections/dpar.hpp>
#include <boost/geometry/srs/projections/impl/dms_parser.hpp>
#include <boost/geometry/srs/projections/proj4.hpp>
#include <boost/geometry/srs/projections/spar.hpp>
+#include <boost/geometry/util/math.hpp>
+#include <boost/geometry/util/condition.hpp>
+
namespace boost { namespace geometry { namespace projections
{
}
}
-template <typename T, BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX>
-inline void pj_init_proj(srs::spar::parameters<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> const& ,
+template <typename T, typename ...Ps>
+inline void pj_init_proj(srs::spar::parameters<Ps...> const& ,
parameters<T> & par)
{
- typedef srs::spar::parameters<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> params_type;
+ typedef srs::spar::parameters<Ps...> params_type;
typedef typename geometry::tuples::find_if
<
params_type,
static const bool is_found = geometry::tuples::is_found<proj_type>::value;
- BOOST_MPL_ASSERT_MSG((is_found), PROJECTION_NOT_NAMED, (params_type));
+ BOOST_GEOMETRY_STATIC_ASSERT((is_found), "Projection not named.", params_type);
par.id = srs::spar::detail::proj_traits<proj_type>::id;
}
int UnitsI = geometry::tuples::find_index_if
<
Params,
- boost::mpl::if_c
+ std::conditional_t
<
Vertical,
srs::spar::detail::is_param_t<srs::spar::vunits>,
srs::spar::detail::is_param_tr<srs::spar::detail::units_traits>
- >::type::template pred
+ >::template pred
>::value,
int ToMeterI = geometry::tuples::find_index_if
<
Params,
- boost::mpl::if_c
+ std::conditional_t
<
Vertical,
srs::spar::detail::is_param_t<srs::spar::vto_meter>,
srs::spar::detail::is_param_t<srs::spar::to_meter>
- >::type::template pred
+ >::template pred
>::value,
- int N = boost::tuples::length<Params>::value
+ int N = geometry::tuples::size<Params>::value
>
struct pj_init_units_static
: pj_init_units_static<Params, Vertical, UnitsI, N, N>
static const int n = sizeof(pj_units) / sizeof(pj_units[0]);
static const int i = srs::spar::detail::units_traits
<
- typename boost::tuples::element<UnitsI, Params>::type
+ typename geometry::tuples::element<UnitsI, Params>::type
>::id;
static const bool is_valid = i >= 0 && i < n;
- BOOST_MPL_ASSERT_MSG((is_valid), UNKNOWN_UNIT_ID, (Params));
+ BOOST_GEOMETRY_STATIC_ASSERT((is_valid), "Unknown unit ID.", Params);
template <typename T>
static void apply(Params const& ,
T & to_meter, T & fr_meter,
T const& , T const& )
{
- to_meter = boost::tuples::get<ToMeterI>(params).value;
+ to_meter = geometry::tuples::get<ToMeterI>(params).value;
fr_meter = 1. / to_meter;
}
};
}
};
-template <typename T, bool Vertical, BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX>
-inline void pj_init_units(srs::spar::parameters<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> const& params,
+template <typename T, bool Vertical, typename ...Ps>
+inline void pj_init_units(srs::spar::parameters<Ps...> const& params,
T & to_meter,
T & fr_meter,
T const& default_to_meter,
{
pj_init_units_static
<
- srs::spar::parameters<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX>,
+ srs::spar::parameters<Ps...>,
Vertical
>::apply(params, to_meter, fr_meter, default_to_meter, default_fr_meter);
}
Params,
srs::spar::detail::is_param_tr<srs::spar::detail::pm_traits>::pred
>::value,
- int N = boost::tuples::length<Params>::value
+ int N = geometry::tuples::size<Params>::value
>
struct pj_init_pm_static
{
template <typename T>
static void apply(Params const& params, T & val)
{
- typedef typename boost::tuples::element<I, Params>::type param_type;
+ typedef typename geometry::tuples::element<I, Params>::type param_type;
- val = srs::spar::detail::pm_traits<param_type>::value(boost::tuples::get<I>(params));
+ val = srs::spar::detail::pm_traits<param_type>::value(geometry::tuples::get<I>(params));
}
};
template <typename Params, int N>
}
};
-template <typename T, BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX>
-inline void pj_init_pm(srs::spar::parameters<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> const& params, T& val)
+template <typename T, typename ...Ps>
+inline void pj_init_pm(srs::spar::parameters<Ps...> const& params, T& val)
{
pj_init_pm_static
<
- srs::spar::parameters<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX>
+ srs::spar::parameters<Ps...>
>::apply(params, val);
}