Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstddef> 7 : #include <stdexcept> 8 : #include <string> 9 : 10 : #include "Utilities/PrettyType.hpp" 11 : 12 : namespace py_bindings { 13 : /*! 14 : * \ingroup PythonBindingsGroup 15 : * \brief Check if a vector-like object access is in bounds. Throws 16 : * std::runtime_error if it is not. 17 : */ 18 : template <typename T> 19 1 : void bounds_check(const T& t, const size_t i) { 20 : if (i >= t.size()) { 21 : throw std::runtime_error{"Out of bounds access (" + std::to_string(i) + 22 : ") into " + pretty_type::name<T>() + " of size " + 23 : std::to_string(t.size())}; 24 : } 25 : } 26 : /*! 27 : * \ingroup PythonBindingsGroup 28 : * \brief Check if a matrix-like object access is in bounds. Throws 29 : * std::runtime_error if it is not. 30 : */ 31 : template <typename T> 32 1 : void matrix_bounds_check(const T& matrix, const size_t row, 33 : const size_t column) { 34 : if (row >= matrix.rows() or column >= matrix.columns()) { 35 : throw std::runtime_error{"Out of bounds access (" + std::to_string(row) + 36 : ", " + std::to_string(column) + 37 : ") into Matrix of size (" + 38 : std::to_string(matrix.rows()) + ", " + 39 : std::to_string(matrix.columns()) + ")"}; 40 : } 41 : } 42 : } // namespace py_bindings