mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
Add has_value to cell_iterator
When iterating over a range that doesn't ignore null rows/columns, the operator*() throws when dereferencing an iterator to a null cell. Add has_value() to cell_iterator to be able to make a check without relying on exceptions. And add a test case.
This commit is contained in:
parent
20f3dac28b
commit
28f7e6fa69
|
@ -136,6 +136,13 @@ public:
|
||||||
/// </summary>
|
/// </summary>
|
||||||
cell_iterator operator++(int);
|
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:
|
private:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If true, cells that don't exist in the worksheet will be skipped during iteration.
|
/// If true, cells that don't exist in the worksheet will be skipped during iteration.
|
||||||
|
@ -263,6 +270,13 @@ public:
|
||||||
/// </summary>
|
/// </summary>
|
||||||
const_cell_iterator operator++(int);
|
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:
|
private:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If true, cells that don't exist in the worksheet will be skipped during iteration.
|
/// If true, cells that don't exist in the worksheet will be skipped during iteration.
|
||||||
|
|
|
@ -278,4 +278,12 @@ const const_cell_iterator::reference const_cell_iterator::operator*() const
|
||||||
{
|
{
|
||||||
return ws_.cell(cursor_);
|
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
|
} // namespace xlnt
|
||||||
|
|
|
@ -78,6 +78,7 @@ public:
|
||||||
register_test(test_lowest_row_or_props);
|
register_test(test_lowest_row_or_props);
|
||||||
register_test(test_highest_row);
|
register_test(test_highest_row);
|
||||||
register_test(test_highest_row_or_props);
|
register_test(test_highest_row_or_props);
|
||||||
|
register_test(test_iterator_has_value);
|
||||||
register_test(test_const_iterators);
|
register_test(test_const_iterators);
|
||||||
register_test(test_const_reverse_iterators);
|
register_test(test_const_reverse_iterators);
|
||||||
register_test(test_column_major_iterators);
|
register_test(test_column_major_iterators);
|
||||||
|
@ -584,6 +585,31 @@ public:
|
||||||
xlnt_assert_equals(ws.highest_row_or_props(), 11);
|
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()
|
void test_const_iterators()
|
||||||
{
|
{
|
||||||
xlnt::workbook wb;
|
xlnt::workbook wb;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user