-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharff_scanner.cpp
More file actions
executable file
·85 lines (72 loc) · 1.48 KB
/
Copy patharff_scanner.cpp
File metadata and controls
executable file
·85 lines (72 loc) · 1.48 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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "arff_scanner.h"
const char ArffScanner::NEWLINE = '\n';
ArffScanner::ArffScanner(const std::string& _file): m_file(_file),
m_line((int64)0),
m_col((int64)0),
m_char(NEWLINE),
m_prev_char((char)0),
m_fp(NULL)
{
m_fp = fopen(m_file.c_str(), "r");
if(m_fp == NULL)
{
THROW("ArffScanner: failed to open the file '%s'!", m_file.c_str());
}
}
ArffScanner::~ArffScanner()
{
if(m_fp != NULL)
{
fclose(m_fp);
m_fp = NULL;
}
}
bool ArffScanner::is_newline(char c) const
{
return (c == NEWLINE);
}
char ArffScanner::next()
{
if(eof())
{
return (char)-1;
}
if(is_newline(m_char))
{
++m_line;
m_col = 0;
}
++m_col;
m_prev_char = m_char;
if(fread(&m_char, sizeof(m_char), 1, m_fp) != sizeof(m_char))
{
m_char = (char)-1; // you would have reached end-of-file?
}
return m_char;
}
char ArffScanner::current() const
{
return m_char;
}
char ArffScanner::previous() const
{
return m_prev_char;
}
int64 ArffScanner::line() const
{
return m_line;
}
int64 ArffScanner::column() const
{
return m_col;
}
bool ArffScanner::eof() const
{
return feof(m_fp);
}
std::string ArffScanner::err_msg(const std::string& msg) const
{
std::string err = m_file + ":" + num2str<int64>(m_line);
err += ":" + num2str<int64>(m_col) + " " + msg;
return err;
}