LeechCraft
0.6.70-17609-g3dde4097dd
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
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
Definition
icoreproxy.h:34
LC::Util::Tokenize::Iterator
Definition
tokenize.h:21
LC::Util::Tokenize::Iterator::pointer
void pointer
Definition
tokenize.h:25
LC::Util::Tokenize::Iterator::Tok_
const Tokenize & Tok_
Definition
tokenize.h:28
LC::Util::Tokenize::Iterator::reference
QStringView reference
Definition
tokenize.h:24
LC::Util::Tokenize::Iterator::NextStart_
qsizetype NextStart_
Definition
tokenize.h:30
LC::Util::Tokenize::Iterator::difference_type
qsizetype difference_type
Definition
tokenize.h:22
LC::Util::Tokenize::Iterator::operator--
Iterator & operator--()
Definition
tokenize.h:52
LC::Util::Tokenize::Iterator::iterator_category
std::bidirectional_iterator_tag iterator_category
Definition
tokenize.h:26
LC::Util::Tokenize::Iterator::CurStart_
qsizetype CurStart_
Definition
tokenize.h:29
LC::Util::Tokenize::Iterator::operator++
Iterator & operator++()
Definition
tokenize.h:39
LC::Util::Tokenize::Iterator::value_type
QStringView value_type
Definition
tokenize.h:23
LC::Util::Tokenize::Iterator::operator==
bool operator==(const Iterator &other) const
Definition
tokenize.h:69
LC::Util::Tokenize::Iterator::operator*
QStringView operator*() const
Definition
tokenize.h:32
LC::Util::Tokenize
Definition
tokenize.h:16
LC::Util::Tokenize::rend
auto rend() const
Definition
tokenize.h:91
LC::Util::Tokenize::Str_
QStringView Str_
Definition
tokenize.h:17
LC::Util::Tokenize::rbegin
auto rbegin() const
Definition
tokenize.h:86
LC::Util::Tokenize::end
Iterator end() const
Definition
tokenize.h:81
LC::Util::Tokenize::begin
Iterator begin() const
Definition
tokenize.h:75
LC::Util::Tokenize::Ch_
QChar Ch_
Definition
tokenize.h:18
src
util
sll
tokenize.h
Generated by
1.14.0