source: trunk/lib/bitblock_iterator.hpp @ 2196

Last change on this file since 2196 was 1950, checked in by ksherdy, 7 years ago

Updated comments format.

File size: 3.0 KB
RevLine 
[1611]1#ifndef BITBLOCK_ITERATOR_H_
2#define BITBLOCK_ITERATOR_H_
3
[1950]4/*=============================================================================
5  bitblock_iterator.hpp
6  Created on:
7  Author: Ken Herdy
8=============================================================================*/
9
[1611]10#include <iterator>
11#include <iostream>
12using namespace std;
13
14#include "bitblock.hpp"
[1619]15#include "bitblock_scan.hpp"
[1611]16
17template<class bitblock_t, class scanblock_t>
[1682]18class ForwardIterator : public iterator<input_iterator_tag, int>
[1611]19{
20public:
[1619]21        ForwardIterator() {}
22
23        ForwardIterator(bitblock_t * s): scanner(s)
24        {
25                scanner.scan_to_next();
26        }
27
[1680]28        void init(bitblock_t * s)
[1679]29        {
[1680]30                scanner.init(s);
[1679]31                scanner.scan_to_next();
32        }
33
[1611]34        // equal position and stream
[1619]35        bool operator==(const ForwardIterator& iter)
[1611]36        {
[1619]37                return ((scanner.get_strm() = iter.scanner.get_strm()) && (scanner.get_pos() == iter.scanner.get_pos));
[1611]38        }
39
[1619]40        // not equal .get_pos()ition and stream
41        bool operator!=(const ForwardIterator& iter)
[1611]42        {
[1619]43                return ( (scanner.get_strm() != iter.scanner.get_strm()) && (scanner.get_pos() != iter.scanner.get_pos()));
[1611]44        }
45
46        // Returns absolute position.
[1932]47        IDISA_ALWAYS_INLINE int32_t operator*()
[1611]48        {
[1619]49                return scanner.get_pos();
[1611]50        }
51
[1625]52        // prefix increment
[1619]53        IDISA_ALWAYS_INLINE ForwardIterator& operator++()
[1611]54        {
[1619]55                scanner.scan_to_next();
[1611]56                return(*this);
57        }
58
[1625]59        // postfix increment
60        ForwardIterator operator++(int)
[1611]61        {
[1619]62                ForwardIterator temp(*this);
[1611]63                ++(*this);
64                return(temp);
65        }
66
67private:
[1619]68        ForwardScanner<bitblock_t, scanblock_t> scanner;
69};
[1611]70
[1857]71class BitBlockForwardIterator: public ForwardIterator<BitBlock, scanword_t> {
[1619]72public:
73        BitBlockForwardIterator(){}
[1857]74        BitBlockForwardIterator(BitBlock * s): ForwardIterator<BitBlock, scanword_t>(s){}
[1611]75};
76
[1619]77template<class bitblock_t, class scanblock_t>
[1682]78class ReverseIterator : public iterator<input_iterator_tag, int>
[1611]79{
80public:
[1619]81        ReverseIterator() {}
82        ReverseIterator(BitBlock * s): scanner(s)
83        {
84                scanner.scan_to_next();
85        }
[1611]86
[1680]87        void init(bitblock_t * s)
[1679]88        {
[1680]89                scanner.init(s);
[1679]90                scanner.scan_to_next();
91        }
92
[1619]93        // equal position and stream
94        bool operator==(const ReverseIterator& iter)
[1611]95        {
[1619]96                return ((scanner.get_strm() = iter.scanner.get_strm()) && (scanner.get_pos() == iter.scanner.get_pos));
[1611]97        }
98
[1619]99        // not equal .get_pos()ition and stream
100        bool operator!=(const ReverseIterator& iter)
101        {
102                return ((scanner.get_strm() != iter.scanner.get_strm()) && (scanner.get_pos() != iter.scanner.get_pos()));
103        }
104
105        // Returns absolute position.
[1932]106        IDISA_ALWAYS_INLINE int32_t operator*()
[1619]107        {
108                return scanner.get_pos();
109        }
110
[1625]111        // prefix decrement
[1619]112        IDISA_ALWAYS_INLINE ReverseIterator& operator--()
[1611]113        {
[1619]114                scanner.scan_to_next();
[1611]115                return(*this);
116        }
117
[1625]118        // postfix decrement
119        ReverseIterator operator--(int)
[1611]120        {
[1619]121                ReverseIterator temp(*this);
[1611]122                --(*this);
123                return(temp);
124        }
125
126private:
[1619]127        ReverseScanner<bitblock_t, scanblock_t> scanner;
[1611]128};
129
[1857]130class BitBlockReverseIterator: public ReverseIterator<BitBlock, scanword_t> {
[1672]131public:
132        BitBlockReverseIterator(){}
[1857]133        BitBlockReverseIterator(BitBlock * s): ReverseIterator<BitBlock, scanword_t>(s){}
[1672]134};
135
136
[1950]137#endif // BITBLOCK_ITERATOR_H_
[1611]138
Note: See TracBrowser for help on using the repository browser.