sprinkle a number of noexcepts into the code
This commit is contained in:
		
							parent
							
								
									9a61f8b894
								
							
						
					
					
						commit
						c2deedac8b
					
				@ -27,7 +27,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "bearing.hpp"
 | 
					#include "bearing.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
std::string bearing::get(const double heading)
 | 
					std::string bearing::get(const double heading) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (heading <= 22.5)
 | 
					    if (heading <= 22.5)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -32,7 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct bearing
 | 
					struct bearing
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static std::string get(const double heading);
 | 
					    static std::string get(const double heading) noexcept;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // BEARING_HPP
 | 
					#endif // BEARING_HPP
 | 
				
			||||||
 | 
				
			|||||||
@ -109,7 +109,7 @@ struct cast
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // source: http://tinodidriksen.com/2011/05/28/cpp-convert-string-to-double-speed/
 | 
					    // source: http://tinodidriksen.com/2011/05/28/cpp-convert-string-to-double-speed/
 | 
				
			||||||
    static double string_to_double(const char *p)
 | 
					    static double string_to_double(const char *p) noexcept
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        double r = 0.0;
 | 
					        double r = 0.0;
 | 
				
			||||||
        bool neg = false;
 | 
					        bool neg = false;
 | 
				
			||||||
 | 
				
			|||||||
@ -36,7 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
double ComputeAngle::OfThreeFixedPointCoordinates(const FixedPointCoordinate &first,
 | 
					double ComputeAngle::OfThreeFixedPointCoordinates(const FixedPointCoordinate &first,
 | 
				
			||||||
                                                  const FixedPointCoordinate &second,
 | 
					                                                  const FixedPointCoordinate &second,
 | 
				
			||||||
                                                  const FixedPointCoordinate &third)
 | 
					                                                  const FixedPointCoordinate &third) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    const double v1x = (first.lon - second.lon) / COORDINATE_PRECISION;
 | 
					    const double v1x = (first.lon - second.lon) / COORDINATE_PRECISION;
 | 
				
			||||||
    const double v1y = mercator::lat2y(first.lat / COORDINATE_PRECISION) -
 | 
					    const double v1y = mercator::lat2y(first.lat / COORDINATE_PRECISION) -
 | 
				
			||||||
 | 
				
			|||||||
@ -36,7 +36,7 @@ struct ComputeAngle
 | 
				
			|||||||
    // atan2 magic, formerly cosine theorem
 | 
					    // atan2 magic, formerly cosine theorem
 | 
				
			||||||
    static double OfThreeFixedPointCoordinates(const FixedPointCoordinate &first,
 | 
					    static double OfThreeFixedPointCoordinates(const FixedPointCoordinate &first,
 | 
				
			||||||
                                               const FixedPointCoordinate &second,
 | 
					                                               const FixedPointCoordinate &second,
 | 
				
			||||||
                                               const FixedPointCoordinate &third);
 | 
					                                               const FixedPointCoordinate &third) noexcept;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // COMPUTE_ANGLE_HPP
 | 
					#endif // COMPUTE_ANGLE_HPP
 | 
				
			||||||
 | 
				
			|||||||
@ -37,16 +37,17 @@ namespace osrm
 | 
				
			|||||||
namespace detail
 | 
					namespace detail
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
// Culled by SFINAE if reserve does not exist or is not accessible
 | 
					// Culled by SFINAE if reserve does not exist or is not accessible
 | 
				
			||||||
template <typename T> constexpr auto has_resize_method(T &t) -> decltype(t.resize(0), bool())
 | 
					template <typename T>
 | 
				
			||||||
 | 
					constexpr auto has_resize_method(T &t) noexcept -> decltype(t.resize(0), bool())
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Used as fallback when SFINAE culls the template method
 | 
					// Used as fallback when SFINAE culls the template method
 | 
				
			||||||
constexpr bool has_resize_method(...) { return false; }
 | 
					constexpr bool has_resize_method(...) noexcept { return false; }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename Container> void sort_unique_resize(Container &vector)
 | 
					template <typename Container> void sort_unique_resize(Container &vector) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::sort(std::begin(vector), std::end(vector));
 | 
					    std::sort(std::begin(vector), std::end(vector));
 | 
				
			||||||
    const auto number_of_unique_elements =
 | 
					    const auto number_of_unique_elements =
 | 
				
			||||||
@ -72,7 +73,9 @@ template <typename Container> void sort_unique_resize(Container &vector)
 | 
				
			|||||||
// }
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename ForwardIterator, typename Function>
 | 
					template <typename ForwardIterator, typename Function>
 | 
				
			||||||
Function for_each_pair(ForwardIterator begin, ForwardIterator end, Function function)
 | 
					Function for_each_pair(ForwardIterator begin,
 | 
				
			||||||
 | 
					                       ForwardIterator end,
 | 
				
			||||||
 | 
					                       Function function) noexcept(noexcept(function))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (begin == end)
 | 
					    if (begin == end)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -40,29 +40,30 @@ template <typename Integer> class range
 | 
				
			|||||||
    Integer iter;
 | 
					    Integer iter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
    range(Integer start, Integer end) : last(end), iter(start)
 | 
					    range(Integer start, Integer end) noexcept : last(end), iter(start)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        static_assert(std::is_integral<Integer>::value, "range type must be integral");
 | 
					        static_assert(std::is_integral<Integer>::value, "range type must be integral");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Iterable functions
 | 
					    // Iterable functions
 | 
				
			||||||
    const range &begin() const { return *this; }
 | 
					    const range &begin() const noexcept { return *this; }
 | 
				
			||||||
    const range &end() const { return *this; }
 | 
					    const range &end() const noexcept { return *this; }
 | 
				
			||||||
    Integer front() const { return iter; }
 | 
					    Integer front() const noexcept { return iter; }
 | 
				
			||||||
    Integer back() const { return last - 1; }
 | 
					    Integer back() const noexcept { return last - 1; }
 | 
				
			||||||
    Integer size() const { return last - iter; }
 | 
					    Integer size() const noexcept { return last - iter; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Iterator functions
 | 
					    // Iterator functions
 | 
				
			||||||
    bool operator!=(const range &) const { return iter < last; }
 | 
					    bool operator!=(const range &) const noexcept { return iter < last; }
 | 
				
			||||||
    void operator++() { ++iter; }
 | 
					    void operator++() noexcept { ++iter; }
 | 
				
			||||||
    Integer operator*() const { return iter; }
 | 
					    Integer operator*() const noexcept { return iter; }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// convenience function to construct an integer range with type deduction
 | 
					// convenience function to construct an integer range with type deduction
 | 
				
			||||||
template <typename Integer>
 | 
					template <typename Integer>
 | 
				
			||||||
range<Integer> irange(const Integer first,
 | 
					range<Integer>
 | 
				
			||||||
                      const Integer last,
 | 
					irange(const Integer first,
 | 
				
			||||||
                      typename std::enable_if<std::is_integral<Integer>::value>::type * = 0)
 | 
					       const Integer last,
 | 
				
			||||||
 | 
					       typename std::enable_if<std::is_integral<Integer>::value>::type * = 0) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return range<Integer>(first, last);
 | 
					    return range<Integer>(first, last);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -33,10 +33,10 @@ namespace osrm
 | 
				
			|||||||
template <typename Iterator> class iter_range
 | 
					template <typename Iterator> class iter_range
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
    iter_range(Iterator begin, Iterator end) : begin_(begin), end_(end) {}
 | 
					    iter_range(Iterator begin, Iterator end) noexcept : begin_(begin), end_(end) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Iterator begin() const { return begin_; }
 | 
					    Iterator begin() const noexcept { return begin_; }
 | 
				
			||||||
    Iterator end() const { return end_; }
 | 
					    Iterator end() const noexcept { return end_; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
    Iterator begin_;
 | 
					    Iterator begin_;
 | 
				
			||||||
@ -46,13 +46,14 @@ template <typename Iterator> class iter_range
 | 
				
			|||||||
// Convenience functions for template parameter inference,
 | 
					// Convenience functions for template parameter inference,
 | 
				
			||||||
// akin to std::make_pair.
 | 
					// akin to std::make_pair.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename Iterator> iter_range<Iterator> integer_range(Iterator begin, Iterator end)
 | 
					template <typename Iterator>
 | 
				
			||||||
 | 
					iter_range<Iterator> integer_range(Iterator begin, Iterator end) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return iter_range<Iterator>(begin, end);
 | 
					    return iter_range<Iterator>(begin, end);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename Reversable>
 | 
					template <typename Reversable>
 | 
				
			||||||
iter_range<typename Reversable::reverse_iterator> reverse(Reversable *reversable)
 | 
					iter_range<typename Reversable::reverse_iterator> reverse(Reversable *reversable) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return iter_range<typename Reversable::reverse_iterator>(reversable->rbegin(),
 | 
					    return iter_range<typename Reversable::reverse_iterator>(reversable->rbegin(),
 | 
				
			||||||
                                                             reversable->rend());
 | 
					                                                             reversable->rend());
 | 
				
			||||||
@ -60,7 +61,7 @@ iter_range<typename Reversable::reverse_iterator> reverse(Reversable *reversable
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
template <typename ConstReversable>
 | 
					template <typename ConstReversable>
 | 
				
			||||||
iter_range<typename ConstReversable::const_reverse_iterator>
 | 
					iter_range<typename ConstReversable::const_reverse_iterator>
 | 
				
			||||||
const_reverse(const ConstReversable *const_reversable)
 | 
					const_reverse(const ConstReversable *const_reversable) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return iter_range<typename ConstReversable::const_reverse_iterator>(const_reversable->crbegin(),
 | 
					    return iter_range<typename ConstReversable::const_reverse_iterator>(const_reversable->crbegin(),
 | 
				
			||||||
                                                                        const_reversable->crend());
 | 
					                                                                        const_reversable->crend());
 | 
				
			||||||
 | 
				
			|||||||
@ -29,12 +29,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <cmath>
 | 
					#include <cmath>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
double mercator::y2lat(const double value)
 | 
					double mercator::y2lat(const double value) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return 180. * M_1_PI * (2. * std::atan(std::exp(value * M_PI / 180.)) - M_PI_2);
 | 
					    return 180. * M_1_PI * (2. * std::atan(std::exp(value * M_PI / 180.)) - M_PI_2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
double mercator::lat2y(const double latitude)
 | 
					double mercator::lat2y(const double latitude) noexcept
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return 180. * M_1_PI * std::log(std::tan(M_PI_4 + latitude * (M_PI / 180.) / 2.));
 | 
					    return 180. * M_1_PI * std::log(std::tan(M_PI_4 + latitude * (M_PI / 180.) / 2.));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -30,9 +30,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct mercator
 | 
					struct mercator
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static double y2lat(const double value);
 | 
					    static double y2lat(const double value) noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static double lat2y(const double latitude);
 | 
					    static double lat2y(const double latitude) noexcept;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // MERCATOR_HPP
 | 
					#endif // MERCATOR_HPP
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user