From 9bd5c492aa3f33e2680e1898d60a1c2bdcb9a79c Mon Sep 17 00:00:00 2001 From: Kp Date: Tue, 13 Oct 2015 02:43:24 +0000 Subject: [PATCH] Move valptridx size call out of line --- common/include/valptridx.h | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/common/include/valptridx.h b/common/include/valptridx.h index 4b917f3cb..e3d7b8e11 100644 --- a/common/include/valptridx.h +++ b/common/include/valptridx.h @@ -115,7 +115,7 @@ public: __attribute_cold __attribute_noreturn DXX_VALPTRIDX_WARN_CALL_NOT_OPTIMIZED_OUT - static void report(const_pointer_type, std::size_t, index_type, const_pointer_type, const_pointer_type); + static void report(const array_managed_type &, index_type, const_pointer_type, const_pointer_type); }; template @@ -128,7 +128,7 @@ public: __attribute_cold __attribute_noreturn DXX_VALPTRIDX_WARN_CALL_NOT_OPTIMIZED_OUT - static void report(const_pointer_type, std::size_t, long); + static void report(const array_managed_type &, long); }; template @@ -141,30 +141,40 @@ public: __attribute_cold __attribute_noreturn DXX_VALPTRIDX_WARN_CALL_NOT_OPTIMIZED_OUT - static void report(const_pointer_type, std::size_t); + static void report(); + __attribute_cold + __attribute_noreturn + DXX_VALPTRIDX_WARN_CALL_NOT_OPTIMIZED_OUT + static void report(const array_managed_type &); }; template -void valptridx::index_mismatch_exception::report(const const_pointer_type array_base, const std::size_t array_size, const index_type supplied_index, const const_pointer_type expected_pointer, const const_pointer_type actual_pointer) +void valptridx::index_mismatch_exception::report(const array_managed_type &array, const index_type supplied_index, const const_pointer_type expected_pointer, const const_pointer_type actual_pointer) { char buf[report_buffer_size]; - prepare_report(buf, array_base, array_size, supplied_index, expected_pointer, actual_pointer); + prepare_report(buf, &array[0], array.size(), supplied_index, expected_pointer, actual_pointer); throw index_mismatch_exception(buf); } template -void valptridx::index_range_exception::report(const const_pointer_type array_base, const std::size_t array_size, const long supplied_index) +void valptridx::index_range_exception::report(const array_managed_type &array, const long supplied_index) { char buf[report_buffer_size]; - prepare_report(buf, array_base, array_size, supplied_index); + prepare_report(buf, &array[0], array.size(), supplied_index); throw index_range_exception(buf); } template -void valptridx::null_pointer_exception::report(const const_pointer_type array_base, const std::size_t array_size) +void valptridx::null_pointer_exception::report() +{ + throw null_pointer_exception("NULL pointer converted"); +} + +template +void valptridx::null_pointer_exception::report(const array_managed_type &array) { char buf[report_buffer_size]; - prepare_report(buf, array_base, array_size); + prepare_report(buf, &array[0], array.size()); throw null_pointer_exception(buf); } @@ -172,28 +182,27 @@ template void valptridx::check_index_match(const managed_type &r, index_type i, const array_managed_type &a) { const auto pi = &a[i]; - DXX_VALPTRIDX_CHECK(pi == &r, index_mismatch_exception, "pointer/index mismatch", &a[0], get_array_size(), i, pi, &r); + DXX_VALPTRIDX_CHECK(pi == &r, index_mismatch_exception, "pointer/index mismatch", a, i, pi, &r); } template typename valptridx::index_type valptridx::check_index_range(index_type i, const array_managed_type &a) { const std::size_t ss = i; - const std::size_t as = get_array_size(); - DXX_VALPTRIDX_CHECK(ss < as, index_range_exception, "invalid index used in array subscript", &a[0], as, ss); + DXX_VALPTRIDX_CHECK(ss < a.size(), index_range_exception, "invalid index used in array subscript", a, ss); return i; } template void valptridx::check_null_pointer_conversion(const_pointer_type p) { - DXX_VALPTRIDX_CHECK(p, null_pointer_exception, "NULL pointer converted", p, get_array_size()); + DXX_VALPTRIDX_CHECK(p, null_pointer_exception, "NULL pointer converted"); } template void valptridx::check_null_pointer(const_pointer_type p, const array_managed_type &a) { - DXX_VALPTRIDX_CHECK(p, null_pointer_exception, "NULL pointer used", &a[0], get_array_size()); + DXX_VALPTRIDX_CHECK(p, null_pointer_exception, "NULL pointer used", a); } template