.. _program_listing_file_src_data_iterator_facade.h: Program Listing for File iterator_facade.h ========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/data/iterator_facade.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once // simplistic replacement for boost::iterator_facade template struct IteratorFacade { // to create DummyIterator inherit from public IteratorFacade // and implement these three functions virtual bool equal(const Iterator& other) const = 0; virtual const Item& dereference() const = 0; virtual void increment() = 0; bool operator==(const Iterator& other) const { return equal(other); } bool operator!=(const Iterator& other) const { return !equal(other); } const Item& operator*() const { return dereference(); } // prefix ++ Iterator& operator++() { increment(); return dynamic_cast(*this); } // postfix ++ Iterator operator++(int) { auto ret = dynamic_cast(*this); increment(); return ret; } const Item* operator->() const { return &dereference(); } };