28#include "../utility/utility.hpp"
29#include "../algorithm/module.hpp"
30#include "../macros.hpp"
45 if (address.starts_with(
"$")) {
47 address.remove_prefix(1);
50 while (!address.empty() && is_alpha(address.front())) {
52 column_nr += address.front() - (is_upper(address.front()) ?
'A' :
'a') + 1;
53 address.remove_prefix(1);
56 if (address.starts_with(
"$")) {
58 address.remove_prefix(1);
61 while (!address.empty() && is_digit(address.front())) {
63 row_nr += address.front() -
'0';
64 address.remove_prefix(1);
82 hi_check(address.empty(),
"Extra characters in spread sheet address {}", address);
90 return {column_nr,
row_nr};
112 if (address.starts_with(
":")) {
113 address.remove_prefix(1);
115 hi_check(address.empty(),
"Extra characters in spread sheet address {}", address);
125 hi_check(
row_nr1 <=
row_nr2,
"Column range must be in ascending direction");
129 hi_check(address.empty(),
"Extra characters in spread sheet address {}", address);
std::pair< std::size_t, std::size_t > parse_spreadsheet_address(std::string_view address, std::size_t start_column_nr=0, std::size_t start_row_nr=0)
Parse a spreadsheet address.
Definition spreadsheet_address.hpp:79
std::tuple< std::size_t, std::size_t, std::size_t, std::size_t > parse_spreadsheet_range(std::string_view address, std::size_t start_column_nr=0, std::size_t start_row_nr=0)
Parse a spreadsheet range.
Definition spreadsheet_address.hpp:102
DOXYGEN BUG.
Definition algorithm.hpp:16
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377