Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. class ADS_set<Key,N>::Iterator {
  2. public:
  3. using value_type = Key;
  4. using difference_type = std::ptrdiff_t;
  5. using reference = const value_type &;
  6. using pointer = const value_type *;
  7. using iterator_category = std::forward_iterator_tag;
  8.  
  9. private:
  10. key_type a , b;
  11. element *pos;
  12. bool special{false};
  13. value_type stop;
  14. void skip() {
  15. while (pos->mode != Mode::used && pos->mode != Mode::end) ++pos;
  16. if (special && pos->mode != Mode::end && std::equal_to<Key>{}(pos->key,stop))
  17. while (pos->mode != Mode::end) ++pos;
  18. }
  19.  
  20. public:
  21. explicit Iterator(element *pos = nullptr): pos{pos} { if (pos) skip(); }
  22. explicit Iterator(element *pos, const key_type &stop): pos{pos}, special{true}, stop{stop} { if (pos) skip(); }
  23. reference operator*() const { return pos->key; }
  24. pointer operator->() const { return &pos->key; }
  25.  
  26. Iterator &operator++() { ++pos; skip(); return *this; }
  27.  
  28. Iterator operator++(int) { auto rc {*this}; ++*this; return rc; }
  29. friend bool operator==(const Iterator &lhs, const Iterator &rhs) { return lhs.pos == rhs.pos; }
  30. friend bool operator!=(const Iterator &lhs, const Iterator &rhs) { return !(lhs == rhs); }
  31. };
  32.  
  33.  
  34.  
  35. ////////////////////////
  36.  
  37.  
  38. const_iterator x(const key_type &a, const key_type &b) const {
  39. if (!count(b)) return end();
  40. const_iterator rc{table, b};
  41. while (rc != end() && !std::equal_to<Key>{}(*rc, a)) ++rc;
  42. return rc;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement