Merge pull request #608 from imgspc/iter_has_value

Add has_value to cell_iterator
This commit is contained in:
Thomas Fussell 2022-01-09 17:42:00 -05:00 committed by GitHub
commit d88c901faa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 0 deletions

View File

@ -136,6 +136,13 @@ public:
/// </summary>
cell_iterator operator++(int);
/// <summary>
/// When iterating over a range that doesn't ignore null cells, operator*()
/// will throw when trying to access the cells that are null. This method
/// checks the existence of a cell.
/// </summary>
bool has_value() const;
private:
/// <summary>
/// If true, cells that don't exist in the worksheet will be skipped during iteration.
@ -263,6 +270,13 @@ public:
/// </summary>
const_cell_iterator operator++(int);
/// <summary>
/// When iterating over a range that doesn't ignore null cells, operator*()
/// will throw when trying to access the cells that are null. This method
/// checks the existence of a cell.
/// </summary>
bool has_value() const;
private:
/// <summary>
/// If true, cells that don't exist in the worksheet will be skipped during iteration.

View File

@ -278,4 +278,12 @@ const const_cell_iterator::reference const_cell_iterator::operator*() const
{
return ws_.cell(cursor_);
}
bool cell_iterator::has_value() const{
return ws_.has_cell(cursor_);
}
bool const_cell_iterator::has_value() const{
return ws_.has_cell(cursor_);
}
} // namespace xlnt

View File

@ -76,6 +76,7 @@ public:
register_test(test_lowest_row_or_props);
register_test(test_highest_row);
register_test(test_highest_row_or_props);
register_test(test_iterator_has_value);
register_test(test_const_iterators);
register_test(test_const_reverse_iterators);
register_test(test_column_major_iterators);
@ -586,6 +587,31 @@ public:
xlnt_assert_equals(ws.highest_row_or_props(), 11);
}
void test_iterator_has_value()
{
xlnt::workbook wb;
auto ws = wb.active_sheet();
// make a worksheet with a blank row and column
ws.cell("A1").value("A1");
ws.cell("A3").value("A3");
ws.cell("C1").value("C1");
xlnt_assert_equals(ws.columns(false)[0].begin().has_value(), true);
xlnt_assert_equals(ws.rows(false)[0].begin().has_value(), true);
xlnt_assert_equals(ws.columns(false)[1].begin().has_value(), false);
xlnt_assert_equals(ws.rows(false)[1].begin().has_value(), false);
// also test const interators.
xlnt_assert_equals(ws.columns(false)[0].cbegin().has_value(), true);
xlnt_assert_equals(ws.rows(false)[0].cbegin().has_value(), true);
xlnt_assert_equals(ws.columns(false)[1].cbegin().has_value(), false);
xlnt_assert_equals(ws.rows(false)[1].cbegin().has_value(), false);
}
void test_const_iterators()
{
xlnt::workbook wb;