Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. #ifndef __01_ITERATOR_HELPER_H__
  2. #define __01_ITERATOR_HELPER_H__
  3.  
  4. #include <memory>
  5.  
  6. /* We need a concreate iterator class */
  7. template<typename It, typename Vt = typename It::valuetype>
  8. class IteratorPointerWrapper {
  9. public:
  10. IteratorPointerWrapper(It* iter_ptr) : iter_ptr_(iter_ptr) {}
  11.  
  12. const Vt& operator*() const {
  13. return **iter_ptr_;
  14. }
  15.  
  16. const Vt* operator->() const {
  17. return &(**iter_ptr_);
  18. }
  19.  
  20. IteratorPointerWrapper& operator++() {
  21. ++(*iter_ptr_);
  22. return *this;
  23. }
  24.  
  25. bool operator!=(const IteratorPointerWrapper& other) const {
  26. return (*other.iter_ptr_) != (*iter_ptr_);
  27. }
  28.  
  29. private:
  30. std::unique_ptr<It> iter_ptr_;
  31. };
  32.  
  33. /* Helper base class to ensure all need methods are implemented. */
  34. template<typename VT>
  35. struct BaseIterator
  36. {
  37. typedef VT valuetype;
  38. typedef BaseIterator<VT> base_iterator_type;
  39.  
  40. virtual const valuetype& operator*() const = 0;
  41.  
  42. virtual const valuetype* operator->() const = 0;
  43.  
  44. virtual base_iterator_type& operator++() = 0;
  45.  
  46. virtual bool operator!=(const base_iterator_type& other) const = 0;
  47. };
  48.  
  49. #endif // __01_ITERATOR_HELPER_H__
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement