/
vhdlint.cc
88 lines (74 loc) · 1.89 KB
/
vhdlint.cc
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
86
87
88
/*
* Copyright (c) 2011 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
* General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "vhdlint.h"
#include <cstring>
#include <cstdlib>
#include <sstream>
using namespace std;
bool vhdlint::is_negative() const
{
return value_ < 0L;
}
bool vhdlint::is_positive() const
{
return value_ > 0L;
}
bool vhdlint::is_zero() const
{
return value_ == 0L;
}
vhdlint::vhdlint(const char* text)
{
unsigned text_length = strlen(text);
if(text_length == 0)
{
value_ = 0L;
return;
}
char* new_text = new char[text_length + 1];
const char* ptr;
char* new_ptr;
for(ptr = text, new_ptr = new_text; *ptr != 0; ++ptr)
{
if(*ptr == '_')
continue;
else
{
*new_ptr = *ptr;
++new_ptr;
}
}
*new_ptr = 0;
istringstream str(new_text);
delete[] new_text;
//TODO: check if numbers greater than MAX_INT are handled correctly
str >> value_;
}
vhdlint::vhdlint(const int64_t& val)
{
value_ = val;
}
vhdlint::vhdlint(const vhdlint& val)
{
value_ = val.as_long();
}
int64_t vhdlint::as_long() const
{
return value_;
}