Skip to content

Commit 6467eb1

Browse files
committed
tokenrange.h: generalize TokenRangeBase
1 parent c6cb94b commit 6467eb1

1 file changed

Lines changed: 20 additions & 21 deletions

File tree

lib/tokenrange.h

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,57 +27,56 @@
2727
#include <iterator>
2828
#include <type_traits>
2929

30-
class Token;
31-
32-
template<typename T, REQUIRES("T must be a Token class", std::is_convertible<T*, const Token*> )>
33-
class TokenRangeBase {
30+
template<typename T>
31+
class RangeBase {
3432
T* mFront;
3533
T* mBack;
3634

3735
public:
38-
TokenRangeBase(T* front, T* back) : mFront(front), mBack(back) {}
36+
RangeBase(T* front, T* back) : mFront(front), mBack(back) {}
3937

40-
struct TokenIterator {
38+
struct Iterator {
4139
using iterator_category = std::forward_iterator_tag;
4240
using value_type = T*;
4341
using difference_type = std::ptrdiff_t;
4442
using pointer = void;
4543
using reference = T*;
4644

47-
T* mt;
48-
TokenIterator() : mt(nullptr) {}
49-
explicit TokenIterator(T* t) : mt(t) {}
50-
TokenIterator& operator++() {
51-
mt = mt->next();
45+
Iterator() : mt(nullptr) {}
46+
explicit Iterator(T* t) : mt(t) {}
47+
Iterator& operator++() {
48+
//mt = mt->next();
5249
return *this;
5350
}
54-
bool operator==(const TokenIterator& b) const {
51+
bool operator==(const Iterator& b) const {
5552
return mt == b.mt;
5653
}
57-
bool operator!=(const TokenIterator& b) const {
54+
bool operator!=(const Iterator& b) const {
5855
return mt != b.mt;
5956
}
6057
T* operator*() const {
6158
return mt;
6259
}
60+
protected:
61+
T* mt;
6362
};
6463

65-
TokenIterator begin() const {
66-
return TokenIterator(mFront);
64+
Iterator begin() const {
65+
return Iterator(mFront);
6766
}
68-
TokenIterator end() const {
69-
return TokenIterator(mBack);
67+
Iterator end() const {
68+
return Iterator(mBack);
7069
}
7170
};
7271

73-
class TokenRange : public TokenRangeBase<Token> {
72+
class TokenRange : public RangeBase<Token> {
7473
public:
75-
TokenRange(Token* front, Token* back) : TokenRangeBase<Token>(front, back) {}
74+
TokenRange(Token* front, Token* back) : RangeBase<Token>(front, back) {}
7675
};
7776

78-
class ConstTokenRange : public TokenRangeBase<const Token> {
77+
class ConstTokenRange : public RangeBase<const Token> {
7978
public:
80-
ConstTokenRange(const Token* front, const Token* back) : TokenRangeBase<const Token>(front, back) {}
79+
ConstTokenRange(const Token* front, const Token* back) :RangeBase<const Token>(front, back) {}
8180
};
8281

8382
#endif // tokenrangeH

0 commit comments

Comments
 (0)