| 508 | : rows_num(rows_num_), columns_num(columns_num_) {} |
| 509 | |
| 510 | struct Iterator |
| 511 | { |
| 512 | size_t row; |
| 513 | size_t column; |
| 514 | MarksCounter * counter; |
| 515 | |
| 516 | Iterator(size_t row_, size_t column_, MarksCounter * counter_) |
| 517 | : row(row_), column(column_), counter(counter_) {} |
| 518 | |
| 519 | Iterator operator++() |
| 520 | { |
| 521 | if (column + 1 == counter->columns_num) |
| 522 | { |
| 523 | ++row; |
| 524 | column = 0; |
| 525 | } |
| 526 | else |
| 527 | { |
| 528 | ++column; |
| 529 | } |
| 530 | |
| 531 | return *this; |
| 532 | } |
| 533 | |
| 534 | bool operator==(const Iterator & other) const { return row == other.row && column == other.column; } |
| 535 | bool operator!=(const Iterator & other) const { return !(*this == other); } |
| 536 | }; |
| 537 | |
| 538 | Iterator get(size_t row, size_t column) { return Iterator(row, column, this); } |
| 539 | Iterator end() { return get(rows_num, 0); } |