Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/importio/LineReader.h
169678 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file LineReader.h
15
/// @author Daniel Krajzewicz
16
/// @author Michael Behrisch
17
/// @date Fri, 19 Jul 2002
18
///
19
// Retrieves a file linewise and reports the lines to a handler.
20
/****************************************************************************/
21
#pragma once
22
#include <config.h>
23
24
#include <string>
25
#include <fstream>
26
#include <utils/common/UtilExceptions.h>
27
28
29
// ===========================================================================
30
// class declarations
31
// ===========================================================================
32
class LineHandler;
33
34
35
// ===========================================================================
36
// class definitions
37
// ===========================================================================
38
/**
39
* @class LineReader
40
* @brief Retrieves a file linewise and reports the lines to a handler.
41
*
42
* This class reads the contents from a file line by line and report them to
43
* a LineHandler-derivate.
44
* @see LineHandler
45
* @todo No checks are done so far during reading/setting position etc.
46
* @todo Should not IOError be thrown if something fails?
47
*/
48
class LineReader {
49
public:
50
/// @brief Constructor
51
LineReader();
52
53
54
/** @brief Constructor
55
*
56
* Initialises reading from the file with the given name using setFile.
57
*
58
* @param[in] file The name of the file to open
59
* @see setFile
60
*/
61
LineReader(const std::string& file);
62
63
64
/// @brief Destructor
65
~LineReader();
66
67
68
/** @brief Returns whether another line may be read (the file was not read completely)
69
* @return Whether further reading is possible
70
*/
71
bool hasMore() const;
72
73
74
/** @brief Reads the whole file linewise, reporting every line to the given LineHandler
75
*
76
* When the LineHandler returns false, the reading will be aborted
77
*
78
* @param[in] lh The LineHandler to report read lines to
79
*/
80
void readAll(LineHandler& lh);
81
82
83
/** @brief Reads a single (the next) line from the file and reports it to the given LineHandler
84
*
85
* When the LineHandler returns false, the reading will be aborted
86
*
87
* @param[in] lh The LineHandler to report read lines to
88
* @return Whether a further line exists
89
*/
90
bool readLine(LineHandler& lh);
91
92
93
/** @brief Reads a single (the next) line from the file and returns it
94
*
95
* @return The next line in the file
96
*/
97
std::string readLine();
98
99
100
/// @brief Closes the reading
101
void close();
102
103
104
/** @brief Returns the name of the used file
105
* @return The name of the opened file
106
*/
107
std::string getFileName() const;
108
109
110
/** @brief Reinitialises the reader for reading from the given file
111
*
112
* Returns false when the file is not readable
113
*
114
* @param[in] file The name of the file to open
115
* @return Whether the file could be opened
116
*/
117
bool setFile(const std::string& file);
118
119
120
/** @brief Returns the current position within the file
121
* @return The current position within the opened file
122
*/
123
unsigned long getPosition();
124
125
126
/// @brief Reinitialises the reading (of the previous file)
127
void reinit();
128
129
130
/** @brief Sets the current position within the file to the given value
131
*
132
* @param[in] pos The new position within the file
133
*/
134
void setPos(unsigned long pos);
135
136
137
/** @brief Returns the information whether the stream is readable
138
* @return Whether the file is usable (good())
139
*/
140
bool good() const;
141
142
143
int getLineNumber() {
144
return myLinesRead;
145
}
146
147
private:
148
/// @brief the name of the file to read the contents from
149
std::string myFileName;
150
151
/// @brief the stream used
152
std::ifstream myStrm;
153
154
/// @brief To override MSVC++-bugs, we use an own getline which uses this buffer
155
char myBuffer[1024];
156
157
/// @brief a string-buffer
158
std::string myStrBuffer;
159
160
/// @brief Information about how many characters were supplied to the LineHandler
161
int myRead;
162
163
/// @brief Information how many bytes are available within the used file
164
int myAvailable;
165
166
/// @brief Information how many bytes were read by the reader from the file
167
int myRread;
168
169
/// @brief Information how many lines were read for meaningful error messages
170
int myLinesRead;
171
172
/// @brief Number of skipped characters at the file begin (UTF-8 BOM)
173
int mySkipBOM;
174
};
175
176