diff --git a/src/lib/serif/discretization/blocks/system_layout.cpp b/src/lib/serif/discretization/blocks/system_layout.cpp new file mode 100644 index 00000000..3886ee93 --- /dev/null +++ b/src/lib/serif/discretization/blocks/system_layout.cpp @@ -0,0 +1,20 @@ +#include "serif/discretization/blocks/system_layout.hpp" + +#include +#include +#include "serif/utils/error/errors.hpp" + +namespace serif::discretization::blocks +{ + std::size_t checked_block_size(const std::span sizes) + { + using namespace utils::errors; + + std::size_t total = 0; + for (const std::size_t size : sizes) { + serif_ensure(size <= std::numeric_limits::max() - total, "The system's packed coefficient count overflows size_t. Check the individual coordinate sizes."); + total += size; + } + return total; + } +} // namespace serif::discretization::blocks