@@ -47,40 +47,39 @@ static constexpr raw_ostream::Colors CommentColor = raw_ostream::YELLOW;
4747static constexpr raw_ostream::Colors LiteralColor = raw_ostream::GREEN;
4848static constexpr raw_ostream::Colors KeywordColor = raw_ostream::BLUE;
4949
50- class ColumnsOrBytes {
50+ template < typename Sub> class ColumnsOrBytes {
5151public:
5252 int V = 0 ;
5353 ColumnsOrBytes (int V) : V(V) {}
5454 bool isValid () const { return V != -1 ; }
55+ Sub next () const { return Sub (V + 1 ); }
56+ Sub prev () const { return Sub (V - 1 ); }
5557
56- bool operator >(ColumnsOrBytes O) { return V > O.V ; }
57- bool operator <(ColumnsOrBytes O) { return V < O.V ; }
58- bool operator <=(ColumnsOrBytes B) { return V <= B.V ; }
59- bool operator !=(ColumnsOrBytes C) { return C.V != V; }
58+ bool operator >(ColumnsOrBytes O) const { return V > O.V ; }
59+ bool operator <(ColumnsOrBytes O) const { return V < O.V ; }
60+ bool operator <=(ColumnsOrBytes B) const { return V <= B.V ; }
61+ bool operator !=(ColumnsOrBytes C) const { return C.V != V; }
6062
61- ColumnsOrBytes &operator +=(ColumnsOrBytes B) {
63+ Sub operator +(Sub B) const { return Sub (V + B.V ); }
64+ Sub &operator +=(Sub B) {
6265 V += B.V ;
63- return *this ;
66+ return *(Sub *) this ;
6467 }
65- ColumnsOrBytes &operator -=(ColumnsOrBytes B) {
68+ Sub operator -(Sub B) const { return Sub{V - B.V }; }
69+ Sub &operator -=(Sub B) {
6670 V -= B.V ;
67- return *this ;
71+ return *(Sub *) this ;
6872 }
6973};
70- class Bytes final : public ColumnsOrBytes {
74+
75+ class Bytes final : public ColumnsOrBytes<Bytes> {
7176public:
7277 Bytes (int V) : ColumnsOrBytes(V) {}
73- Bytes next () const { return Bytes (V + 1 ); }
74- Bytes prev () const { return Bytes (V - 1 ); }
75- Bytes operator +(Bytes B) { return Bytes{V + B.V }; }
7678};
77- class Columns final : public ColumnsOrBytes {
79+
80+ class Columns final : public ColumnsOrBytes<Columns> {
7881public:
7982 Columns (int V) : ColumnsOrBytes(V) {}
80- Columns next () const { return Columns (V + 1 ); }
81- Columns prev () const { return Columns (V - 1 ); }
82- Columns operator -(Columns B) { return Columns{V - B.V }; }
83- Columns operator +(Columns B) { return Columns{V + B.V }; }
8483};
8584
8685// / Add highlights to differences in template strings.
0 commit comments