LeechCraft
0.6.70-15082-g543737046d
Modular cross-platform feature rich live environment.
tokenize.h
Go to the documentation of this file.
1
/**********************************************************************
2
* LeechCraft - modular cross-platform feature rich internet client.
3
* Copyright (C) 2006-2014 Georg Rudoy
4
*
5
* Distributed under the Boost Software License, Version 1.0.
6
* (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7
**********************************************************************/
8
9
#pragma once
10
11
#include <QStringView>
12
13
namespace
LC::Util
14
{
15
struct
Tokenize
16
{
17
QStringView
Str_
;
18
QChar
Ch_
;
19
20
struct
Iterator
21
{
22
using
difference_type
= qsizetype;
23
using
value_type
= QStringView;
24
using
reference
= QStringView;
25
using
pointer
= void;
26
using
iterator_category
= std::bidirectional_iterator_tag;
27
28
const
Tokenize
&
Tok_
;
29
qsizetype
CurStart_
;
30
qsizetype
NextStart_
;
31
32
QStringView
operator*
()
const
33
{
34
return
NextStart_
>= 0 ?
35
Tok_
.
Str_
.mid (
CurStart_
,
NextStart_
-
CurStart_
- 1) :
36
Tok_
.
Str_
.mid (
CurStart_
);
37
}
38
39
Iterator
&
operator++
()
40
{
41
CurStart_
=
NextStart_
;
42
if
(
CurStart_
== -1)
43
return
*
this
;
44
45
NextStart_
=
Tok_
.
Str_
.indexOf (
Tok_
.
Ch_
,
NextStart_
);
46
if
(
NextStart_
>= 0)
47
++
NextStart_
;
48
49
return
*
this
;
50
}
51
52
Iterator
&
operator--
()
53
{
54
if
(
CurStart_
== 0)
55
return
*
this
;
56
57
NextStart_
=
CurStart_
;
58
59
if
(
CurStart_
== 1)
60
CurStart_
= 0;
61
else
if
(
CurStart_
>= 0)
// actually implies CurStart_ > 1
62
CurStart_
=
Tok_
.
Str_
.lastIndexOf (
Tok_
.
Ch_
,
CurStart_
- 2) + 1;
63
else
64
CurStart_
=
Tok_
.
Str_
.lastIndexOf (
Tok_
.
Ch_
) + 1;
65
66
return
*
this
;
67
}
68
69
bool
operator==
(
const
Iterator
& other)
const
70
{
71
return
CurStart_
== other.
CurStart_
&&
NextStart_
== other.
NextStart_
;
72
}
73
};
74
75
Iterator
begin
()
const
76
{
77
Iterator it { *
this
, -1, 0 };
78
return
++it;
79
}
80
81
Iterator
end
()
const
82
{
83
return
{ *
this
, -1, -1 };
84
}
85
86
auto
rbegin
()
const
87
{
88
return
std::reverse_iterator {
end
() };
89
}
90
91
auto
rend
()
const
92
{
93
return
std::reverse_iterator {
begin
() };
94
}
95
};
96
}
LC::Util::Tokenize::Iterator::pointer
void pointer
Definition:
tokenize.h:37
LC::Util::Tokenize::Iterator::reference
QStringView reference
Definition:
tokenize.h:36
LC::Util::Tokenize::Iterator::difference_type
qsizetype difference_type
Definition:
tokenize.h:34
LC::Util::Tokenize::Iterator::CurStart_
qsizetype CurStart_
Definition:
tokenize.h:41
LC::Util::Tokenize::Iterator::operator--
Iterator & operator--()
Definition:
tokenize.h:64
LC::Util::Tokenize::Iterator::operator==
bool operator==(const Iterator &other) const
Definition:
tokenize.h:81
LC::Util
Definition:
icoreproxy.h:33
LC::Util::Tokenize::Iterator::NextStart_
qsizetype NextStart_
Definition:
tokenize.h:42
LC::Util::Tokenize::Iterator::Tok_
const Tokenize & Tok_
Definition:
tokenize.h:40
LC::Util::Tokenize::Iterator
Definition:
tokenize.h:32
LC::Util::Tokenize::rend
auto rend() const
Definition:
tokenize.h:103
LC::Util::Tokenize::Iterator::operator++
Iterator & operator++()
Definition:
tokenize.h:51
LC::Util::Tokenize
Definition:
tokenize.h:21
LC::Util::Tokenize::rbegin
auto rbegin() const
Definition:
tokenize.h:98
LC::Util::Tokenize::Str_
QStringView Str_
Definition:
tokenize.h:29
LC::Util::Tokenize::Iterator::iterator_category
std::bidirectional_iterator_tag iterator_category
Definition:
tokenize.h:38
LC::Util::Tokenize::Ch_
QChar Ch_
Definition:
tokenize.h:30
LC::Util::Tokenize::end
Iterator end() const
Definition:
tokenize.h:93
LC::Util::Tokenize::begin
Iterator begin() const
Definition:
tokenize.h:87
LC::Util::Tokenize::Iterator::operator*
QStringView operator*() const
Definition:
tokenize.h:44
LC::Util::Tokenize::Iterator::value_type
QStringView value_type
Definition:
tokenize.h:35
src
util
sll
tokenize.h
Generated by
1.8.17