Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
portabledsb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
External Wiki
External Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
App_Technologies
portabledsb
Commits
08b11682
Commit
08b11682
authored
Jan 02, 2016
by
jacobgladish
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed string array in Variant.
parent
dd4342db
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
60 additions
and
7 deletions
+60
-7
Common/Variant.cpp
Common/Variant.cpp
+29
-1
Common/Variant.h
Common/Variant.h
+18
-4
Common/unit_test/VariantTest.cpp
Common/unit_test/VariantTest.cpp
+13
-2
No files found.
Common/Variant.cpp
View file @
08b11682
...
...
@@ -14,6 +14,34 @@ namespace
buff
<<
static_cast
<
TOut
>
(
typed_array
[
i
]);
}
}
template
<
class
T
>
void
releaseArray
(
void
*
p
)
{
T
*
arr
=
reinterpret_cast
<
T
*>
(
p
);
delete
[]
arr
;
}
void
freeArray2
(
void
*
p
,
common
::
Variant
::
DataType
t
)
{
typedef
common
::
Variant
::
DataType
dt
;
switch
(
t
)
{
case
dt
::
BooleanArray
:
releaseArray
<
bool
>
(
p
);
break
;
case
dt
::
UInt8Array
:
releaseArray
<
uint8_t
>
(
p
);
break
;
case
dt
::
Int16Array
:
releaseArray
<
int16_t
>
(
p
);
break
;
case
dt
::
UInt16Array
:
releaseArray
<
uint16_t
>
(
p
);
break
;
case
dt
::
Int32Array
:
releaseArray
<
int32_t
>
(
p
);
break
;
case
dt
::
UInt32Array
:
releaseArray
<
uint32_t
>
(
p
);
break
;
case
dt
::
Int64Array
:
releaseArray
<
int64_t
>
(
p
);
break
;
case
dt
::
UInt64Array
:
releaseArray
<
uint64_t
>
(
p
);
break
;
case
dt
::
DoubleArray
:
releaseArray
<
double
>
(
p
);
break
;
case
dt
::
StringArray
:
releaseArray
<
std
::
string
>
(
p
);
break
;
default:
assert
(
false
);
break
;
}
}
}
common
::
Variant
::
Data
::
Data
()
...
...
@@ -200,7 +228,7 @@ common::Variant::~Variant()
delete
m_data
.
Item
.
v_string
;
if
(
IsArray
()
&&
m_data
.
Item
.
v_arr
)
free
(
m_data
.
Item
.
v_arr
);
free
Array2
(
m_data
.
Item
.
v_arr
,
m_data
.
Type
);
}
common
::
Variant
&
...
...
Common/Variant.h
View file @
08b11682
...
...
@@ -117,6 +117,20 @@ namespace common
std
::
string
ToString
(
bool
*
ok
=
NULL
)
const
;
private:
template
<
class
T
>
static
void
*
allocArray
(
int
n
)
{
T
*
p
=
new
T
[
n
];
return
reinterpret_cast
<
void
*>
(
p
);
}
template
<
class
T
>
static
void
freeArray
(
void
*
p
)
{
T
*
arr
=
reinterpret_cast
<
T
*>
(
p
);
delete
[]
arr
;
}
bool
CanConvert
(
DataType
t
)
const
;
template
<
class
T
>
...
...
@@ -204,12 +218,12 @@ namespace common
void
AssignFromArray
(
Data
&
to
,
Data
const
&
from
)
{
if
(
IsArray
()
&&
to
.
Item
.
v_arr
)
free
(
to
.
Item
.
v_arr
);
free
Array
<
T
>
(
to
.
Item
.
v_arr
);
memset
(
&
to
.
Item
,
0
,
sizeof
(
to
.
Item
));
to
.
Item
.
v_arr
=
malloc
(
sizeof
(
T
)
*
from
.
Size
);
to
.
Size
=
from
.
Size
;
to
.
Type
=
from
.
Type
;
to
.
Item
.
v_arr
=
allocArray
<
T
>
(
from
.
Size
);
T
*
toVect
=
reinterpret_cast
<
T
*>
(
to
.
Item
.
v_arr
);
T
*
fromVect
=
reinterpret_cast
<
T
*>
(
from
.
Item
.
v_arr
);
...
...
@@ -225,10 +239,10 @@ namespace common
if
(
d
.
Size
>
0
)
{
if
(
IsArray
()
&&
d
.
Item
.
v_arr
)
free
(
d
.
Item
.
v_arr
);
free
Array
<
T
>
(
d
.
Item
.
v_arr
);
memset
(
&
d
.
Item
,
0
,
sizeof
(
d
.
Item
));
d
.
Item
.
v_arr
=
malloc
(
sizeof
(
T
)
*
d
.
Size
);
d
.
Item
.
v_arr
=
allocArray
<
T
>
(
d
.
Size
);
T
*
arr
=
reinterpret_cast
<
T
*>
(
d
.
Item
.
v_arr
);
for
(
int
i
=
0
;
i
<
d
.
Size
;
++
i
)
...
...
Common/unit_test/VariantTest.cpp
View file @
08b11682
...
...
@@ -69,13 +69,25 @@ TEST(Variant, UInt8Array) {
EXPECT_EQ
(
std
::
string
(
"[10,20]"
),
v1
.
ToString
());
}
TEST
(
Variant
,
StringArray
)
{
std
::
vector
<
std
::
string
>
a1
;
a1
.
push_back
(
"a"
);
a1
.
push_back
(
"b"
);
common
::
Variant
v1
(
a1
);
common
::
Variant
v2
=
v1
;
EXPECT_TRUE
(
v1
.
IsArray
());
EXPECT_EQ
(
v1
.
Length
(),
2
);
}
TEST
(
VariantTest
,
String
)
{
EXPECT_EQ
(
std
::
string
(
"hello world"
),
TestVariant_StdString
(
"hello world"
));
EXPECT_EQ
(
std
::
string
(
""
),
TestVariant_StdString
(
""
));
EXPECT_EQ
(
std
::
string
(),
TestVariant_StdString
(
""
));
}
#if 0
TEST
(
VariantTest
,
StringCopyAssign
)
{
common
::
Variant
v1
;
common
::
Variant
v2
;
...
...
@@ -90,7 +102,6 @@ TEST(VariantTest, StringCopyAssign) {
v1
=
v2
;
EXPECT_EQ
(
v1
.
ToString
(),
v2
.
ToString
());
}
#endif
int
main
(
int
argc
,
char
*
argv
[])
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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