From c2deedac8b418688f242dda0887888f31a4ef694 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 2 Apr 2015 11:36:04 +0200 Subject: [PATCH] sprinkle a number of noexcepts into the code --- util/bearing.cpp | 2 +- util/bearing.hpp | 2 +- util/cast.hpp | 2 +- util/compute_angle.cpp | 2 +- util/compute_angle.hpp | 2 +- util/container.hpp | 11 +++++++---- util/integer_range.hpp | 25 +++++++++++++------------ util/iterator_range.hpp | 13 +++++++------ util/mercator.cpp | 4 ++-- util/mercator.hpp | 4 ++-- 10 files changed, 36 insertions(+), 31 deletions(-) diff --git a/util/bearing.cpp b/util/bearing.cpp index df238277a..48fd7f92b 100644 --- a/util/bearing.cpp +++ b/util/bearing.cpp @@ -27,7 +27,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "bearing.hpp" -std::string bearing::get(const double heading) +std::string bearing::get(const double heading) noexcept { if (heading <= 22.5) { diff --git a/util/bearing.hpp b/util/bearing.hpp index b8a79ee97..8b16ebc16 100644 --- a/util/bearing.hpp +++ b/util/bearing.hpp @@ -32,7 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct bearing { - static std::string get(const double heading); + static std::string get(const double heading) noexcept; }; #endif // BEARING_HPP diff --git a/util/cast.hpp b/util/cast.hpp index e396471e4..6d6ff6548 100644 --- a/util/cast.hpp +++ b/util/cast.hpp @@ -109,7 +109,7 @@ struct cast } // 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; bool neg = false; diff --git a/util/compute_angle.cpp b/util/compute_angle.cpp index 86be5634b..8cd8aa441 100644 --- a/util/compute_angle.cpp +++ b/util/compute_angle.cpp @@ -36,7 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. double ComputeAngle::OfThreeFixedPointCoordinates(const FixedPointCoordinate &first, const FixedPointCoordinate &second, - const FixedPointCoordinate &third) + const FixedPointCoordinate &third) noexcept { const double v1x = (first.lon - second.lon) / COORDINATE_PRECISION; const double v1y = mercator::lat2y(first.lat / COORDINATE_PRECISION) - diff --git a/util/compute_angle.hpp b/util/compute_angle.hpp index 477e43689..da84cafaa 100644 --- a/util/compute_angle.hpp +++ b/util/compute_angle.hpp @@ -36,7 +36,7 @@ struct ComputeAngle // atan2 magic, formerly cosine theorem static double OfThreeFixedPointCoordinates(const FixedPointCoordinate &first, const FixedPointCoordinate &second, - const FixedPointCoordinate &third); + const FixedPointCoordinate &third) noexcept; }; #endif // COMPUTE_ANGLE_HPP diff --git a/util/container.hpp b/util/container.hpp index 49329a58b..891cc3d18 100644 --- a/util/container.hpp +++ b/util/container.hpp @@ -37,16 +37,17 @@ namespace osrm namespace detail { // Culled by SFINAE if reserve does not exist or is not accessible -template constexpr auto has_resize_method(T &t) -> decltype(t.resize(0), bool()) +template +constexpr auto has_resize_method(T &t) noexcept -> decltype(t.resize(0), bool()) { return true; } // 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 void sort_unique_resize(Container &vector) +template void sort_unique_resize(Container &vector) noexcept { std::sort(std::begin(vector), std::end(vector)); const auto number_of_unique_elements = @@ -72,7 +73,9 @@ template void sort_unique_resize(Container &vector) // } template -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) { diff --git a/util/integer_range.hpp b/util/integer_range.hpp index 811bbbe9f..46b69ba03 100644 --- a/util/integer_range.hpp +++ b/util/integer_range.hpp @@ -40,29 +40,30 @@ template class range Integer iter; 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::value, "range type must be integral"); } // Iterable functions - const range &begin() const { return *this; } - const range &end() const { return *this; } - Integer front() const { return iter; } - Integer back() const { return last - 1; } - Integer size() const { return last - iter; } + const range &begin() const noexcept { return *this; } + const range &end() const noexcept { return *this; } + Integer front() const noexcept { return iter; } + Integer back() const noexcept { return last - 1; } + Integer size() const noexcept { return last - iter; } // Iterator functions - bool operator!=(const range &) const { return iter < last; } - void operator++() { ++iter; } - Integer operator*() const { return iter; } + bool operator!=(const range &) const noexcept { return iter < last; } + void operator++() noexcept { ++iter; } + Integer operator*() const noexcept { return iter; } }; // convenience function to construct an integer range with type deduction template -range irange(const Integer first, - const Integer last, - typename std::enable_if::value>::type * = 0) +range +irange(const Integer first, + const Integer last, + typename std::enable_if::value>::type * = 0) noexcept { return range(first, last); } diff --git a/util/iterator_range.hpp b/util/iterator_range.hpp index 900426863..f4fa4f828 100644 --- a/util/iterator_range.hpp +++ b/util/iterator_range.hpp @@ -33,10 +33,10 @@ namespace osrm template class iter_range { 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 end() const { return end_; } + Iterator begin() const noexcept { return begin_; } + Iterator end() const noexcept { return end_; } private: Iterator begin_; @@ -46,13 +46,14 @@ template class iter_range // Convenience functions for template parameter inference, // akin to std::make_pair. -template iter_range integer_range(Iterator begin, Iterator end) +template +iter_range integer_range(Iterator begin, Iterator end) noexcept { return iter_range(begin, end); } template -iter_range reverse(Reversable *reversable) +iter_range reverse(Reversable *reversable) noexcept { return iter_range(reversable->rbegin(), reversable->rend()); @@ -60,7 +61,7 @@ iter_range reverse(Reversable *reversable template iter_range -const_reverse(const ConstReversable *const_reversable) +const_reverse(const ConstReversable *const_reversable) noexcept { return iter_range(const_reversable->crbegin(), const_reversable->crend()); diff --git a/util/mercator.cpp b/util/mercator.cpp index 298257630..0ccd99981 100644 --- a/util/mercator.cpp +++ b/util/mercator.cpp @@ -29,12 +29,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -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); } -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.)); } diff --git a/util/mercator.hpp b/util/mercator.hpp index 462c73e23..e994c8499 100644 --- a/util/mercator.hpp +++ b/util/mercator.hpp @@ -30,9 +30,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 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