libjmmcg
release_579_6_g8cffd
A C++ library containing an eclectic mix of useful, advanced components.
csv_iterator.hpp
Go to the documentation of this file.
1
#
ifndef
LIBJMMCG_CORE_CSV_ITERATOR_HPP
2
#
define
LIBJMMCG_CORE_CSV_ITERATOR_HPP
3
4
/******************************************************************************
5
** Copyright © 2020 by J.M.McGuiness, coder@hussar.me.uk & M.Waplington
6
**
7
** This library is free software; you can redistribute it and/or
8
** modify it under the terms of the GNU Lesser General Public
9
** License as published by the Free Software Foundation; either
10
** version 2.1 of the License, or (at your option) any later version.
11
**
12
** This library is distributed in the hope that it will be useful,
13
** but WITHOUT ANY WARRANTY; without even the implied warranty of
14
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
** Lesser General Public License for more details.
16
**
17
** You should have received a copy of the GNU Lesser General Public
18
** License along with this library; if not, write to the Free Software
19
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
*/
21
22
#
include
"config.h"
23
24
#
include
<
istream
>
25
#
include
<
iterator
>
26
#
include
<
string
>
27
28
namespace
jmmcg
{
namespace
LIBJMMCG_VER_NAMESPACE
{
29
30
/**
31
* Taken from "Generic Programming and the STL" by M.H.Austern.
32
*/
33
class
csv_iterator
{
34
public
:
35
using
iterator_category=
std
::input_iterator_tag;
36
using
value_type=
std
::string;
37
using
difference_type
=
ptrdiff_t
;
38
using
pointer=
std
::string
const
*;
39
using
reference=
std
::string
const
&;
40
41
explicit
csv_iterator
(
char
delim=default_delimiter)
noexcept
(
true
);
42
explicit
csv_iterator
(
std
::string
const
& data,
char
delim=default_delimiter)
noexcept
(
false
);
43
44
reference
operator
*()
const
noexcept
(
true
);
45
pointer
operator
->()
const
noexcept
(
true
);
46
47
csv_iterator
operator
++()
noexcept
(
false
);
48
[[
nodiscard
]]
csv_iterator
operator
++(
int
)
noexcept
(
false
);
49
50
bool
operator
==(
csv_iterator
const
& i)
const
noexcept
(
true
);
51
bool
operator
!=(
csv_iterator
const
& i)
const
noexcept
(
true
);
52
53
private
:
54
static
inline
constexpr
const
char
default_delimiter=
','
;
55
56
std
::string
const
* data_{
nullptr
};
57
char
delim_;
58
std
::size_t pos_{};
59
bool
valid_{};
60
std
::string field_{};
61
62
void
read()
noexcept
(
false
);
63
};
64
65
} }
66
67
#
include
"csv_iterator_impl.hpp"
68
69
#
endif
core
csv_iterator.hpp
Generated on Tue May 11 2021 17:19:23 for libjmmcg by
1.9.2