#ifndef STA_CAN_ITER_HPP #define STA_CAN_ITER_HPP #include namespace sta { class CanPendingRxFifos { public: using value_type = uint8_t; using reference = value_type &; using const_reference = const value_type &; using size_type = uint8_t; class const_iterator { public: using value_type = CanPendingRxFifos::value_type; using reference = const_reference; using pointer = const value_type *; public: const_iterator(const const_iterator & iter); const_iterator & operator=(const const_iterator & iter); bool operator==(const const_iterator & iter) const; bool operator!=(const const_iterator & iter) const; const_iterator & operator++(); const_iterator operator++(int); reference operator*() const; private: const_iterator(uint32_t rxFlags, uint8_t idx, uint8_t endIdx); bool isRxPending() const; friend class CanPendingRxFifos; private: uint32_t rxFlags_; uint8_t idx_; uint8_t endIdx_; }; public: CanPendingRxFifos(uint32_t rxFlags, uint8_t numFifos); const_iterator begin() const; const_iterator end() const; private: uint32_t rxFlags_; uint8_t numFifos_; }; } // namespace sta #endif // STA_CAN_ITER_HPP