Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sebastian Schrader
Kea
Commits
1ed6c584
Commit
1ed6c584
authored
Aug 08, 2013
by
Kazunori Fujiwara
Browse files
Merge branch 'trac3015' into trac3016
parents
b3d42b39
e5b3471d
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/lib/cc/data.cc
View file @
1ed6c584
...
...
@@ -393,11 +393,6 @@ numberFromStringstream(std::istream& in, int& pos) {
// that can also hold an e value? (and have specific getters if the
// value is larger than an int can handle)
//
// Type of IntElement is changed from long int to int64_t.
// However, strtoint64_t function does not exist.
// It is assumed that "long long" and int64_t are the same sizes.
// strtoll is used to convert string to integer.
//
ElementPtr
fromStringstreamNumber
(
std
::
istream
&
in
,
int
&
pos
)
{
std
::
string
number
=
numberFromStringstream
(
in
,
pos
);
...
...
src/lib/cc/data.h
View file @
1ed6c584
...
...
@@ -166,6 +166,8 @@ public:
/// the right type. Set the value and return true if the Elements
/// is of the correct type
///
/// Notes: Read notes of IntElement definition about the use of
/// long long int, long int and int.
//@{
virtual
bool
setValue
(
const
long
long
int
v
);
bool
setValue
(
const
long
int
i
)
{
return
(
setValue
(
static_cast
<
long
long
int
>
(
i
)));
};
...
...
@@ -273,6 +275,9 @@ public:
/// underlying system).
/// (Note that that is different from an NullElement, which
/// represents an empty value, and is created with Element::create())
///
/// Notes: Read notes of IntElement definition about the use of
/// long long int, long int and int.
//@{
static
ElementPtr
create
();
static
ElementPtr
create
(
const
long
long
int
i
);
...
...
@@ -373,6 +378,16 @@ public:
//@}
};
/// Notes: IntElement type is changed to int64_t.
/// Due to C++ problems on overloading and automatic type conversion,
/// (C++ tries to convert integer type values and reference/pointer
/// if value types do not match exactly)
/// We decided the storage as int64_t,
/// three (long long, long, int) override function defintions
/// and cast int/long/long long to int64_t via long long.
/// Therefore, call by value methods (create, setValue) have three
/// (int,long,long long) definitions. Others use int64_t.
///
class
IntElement
:
public
Element
{
int64_t
i
;
private:
...
...
src/lib/cc/tests/data_unittests.cc
View file @
1ed6c584
...
...
@@ -205,7 +205,9 @@ testGetValueInt() {
std
::
map
<
std
::
string
,
ConstElementPtr
>
m
;
el
=
Element
::
create
(
1
);
EXPECT_NO_THROW
(
el
->
intValue
());
EXPECT_NO_THROW
({
EXPECT_EQ
(
1
,
el
->
intValue
());
});
EXPECT_THROW
(
el
->
doubleValue
(),
TypeError
);
EXPECT_THROW
(
el
->
boolValue
(),
TypeError
);
EXPECT_THROW
(
el
->
stringValue
(),
TypeError
);
...
...
@@ -220,25 +222,33 @@ testGetValueInt() {
EXPECT_EQ
(
1
,
i
);
el
=
Element
::
create
(
9223372036854775807LL
);
EXPECT_NO_THROW
(
el
->
intValue
());
EXPECT_NO_THROW
({
EXPECT_EQ
(
9223372036854775807LL
,
el
->
intValue
());
});
EXPECT_TRUE
(
el
->
getValue
(
i
));
EXPECT_EQ
(
9223372036854775807LL
,
i
);
ll
=
9223372036854775807LL
;
el
=
Element
::
create
(
ll
);
EXPECT_NO_THROW
(
el
->
intValue
());
EXPECT_NO_THROW
({
EXPECT_EQ
(
ll
,
el
->
intValue
());
});
EXPECT_TRUE
(
el
->
getValue
(
i
));
EXPECT_EQ
(
ll
,
i
);
i32
=
2147483647L
;
el
=
Element
::
create
(
i32
);
EXPECT_NO_THROW
(
el
->
intValue
());
EXPECT_NO_THROW
({
EXPECT_EQ
(
i32
,
el
->
intValue
());
});
EXPECT_TRUE
(
el
->
getValue
(
i
));
EXPECT_EQ
(
i32
,
i
);
l
=
2147483647L
;
el
=
Element
::
create
(
l
);
EXPECT_NO_THROW
(
el
->
intValue
());
EXPECT_NO_THROW
({
EXPECT_EQ
(
l
,
el
->
intValue
());
});
EXPECT_TRUE
(
el
->
getValue
(
i
));
EXPECT_EQ
(
l
,
i
);
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment