-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSourceReader.cpp
More file actions
70 lines (54 loc) · 1.02 KB
/
SourceReader.cpp
File metadata and controls
70 lines (54 loc) · 1.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "SourceReader.h"
SourceReader::SourceReader(void)
{
}
SourceReader::~SourceReader(void)
{
if(inputStream.is_open()) inputStream.close();
}
bool SourceReader::openSource(string _source)
{
source = _source;
row = 0;
column = 0;
if(inputStream.is_open()) inputStream.close();
inputStream.open(source.c_str());
if(!inputStream)
{
cout<<"Cannot open file '"<<source<<"'"<<endl;
return false;
}
if(!getNextLine())
{
cout<<"Empty file "<<source<<endl;
return false;
}
return true;
}
bool SourceReader::getNextLine()
{
if(inputStream.eof()) return false;
getline(inputStream, line);
line.push_back('\n');
row++;
column = 0;
while(line[column]==' ' || line[column]=='\t') column++;
return true;
}
char SourceReader::getNextChar()
{
if(column == line.size()) //end of line
{
if(getNextLine()) //if there is next line
{
return line[column++];
}
else
return EOF; //end of file
}
return line[column++];
}
pair<int,int> SourceReader::getPosition()
{
return make_pair(column, row);
}