Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
yaml-cpp
Commits
82331138
Commit
82331138
authored
Jul 04, 2012
by
Jesse Beder
Browse files
Added free Clone() function for Nodes
parent
f29ea4b0
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
67 additions
and
3 deletions
+67
-3
include/yaml-cpp/node/impl.h
include/yaml-cpp/node/impl.h
+1
-1
include/yaml-cpp/node/node.h
include/yaml-cpp/node/node.h
+3
-1
src/node.cpp
src/node.cpp
+14
-0
test/new-api/nodetests.cpp
test/new-api/nodetests.cpp
+49
-1
No files found.
include/yaml-cpp/node/impl.h
View file @
82331138
...
@@ -224,7 +224,7 @@ namespace YAML
...
@@ -224,7 +224,7 @@ namespace YAML
m_pMemory
->
merge
(
*
rhs
.
m_pMemory
);
m_pMemory
->
merge
(
*
rhs
.
m_pMemory
);
m_pNode
=
rhs
.
m_pNode
;
m_pNode
=
rhs
.
m_pNode
;
}
}
// size/iterator
// size/iterator
inline
std
::
size_t
Node
::
size
()
const
inline
std
::
size_t
Node
::
size
()
const
{
{
...
...
include/yaml-cpp/node/node.h
View file @
82331138
...
@@ -56,7 +56,7 @@ namespace YAML
...
@@ -56,7 +56,7 @@ namespace YAML
bool
is
(
const
Node
&
rhs
)
const
;
bool
is
(
const
Node
&
rhs
)
const
;
template
<
typename
T
>
Node
&
operator
=
(
const
T
&
rhs
);
template
<
typename
T
>
Node
&
operator
=
(
const
T
&
rhs
);
Node
&
operator
=
(
const
Node
&
rhs
);
Node
&
operator
=
(
const
Node
&
rhs
);
// size/iterator
// size/iterator
std
::
size_t
size
()
const
;
std
::
size_t
size
()
const
;
...
@@ -105,6 +105,8 @@ namespace YAML
...
@@ -105,6 +105,8 @@ namespace YAML
};
};
bool
operator
==
(
const
Node
&
lhs
,
const
Node
&
rhs
);
bool
operator
==
(
const
Node
&
lhs
,
const
Node
&
rhs
);
Node
Clone
(
const
Node
&
node
);
template
<
typename
T
>
template
<
typename
T
>
struct
convert
;
struct
convert
;
...
...
src/node.cpp
0 → 100644
View file @
82331138
#include "yaml-cpp/node/node.h"
#include "nodebuilder.h"
#include "nodeevents.h"
namespace
YAML
{
Node
Clone
(
const
Node
&
node
)
{
NodeEvents
events
(
node
);
NodeBuilder
builder
;
events
.
Emit
(
builder
);
return
builder
.
Root
();
}
}
test/new-api/nodetests.cpp
View file @
82331138
...
@@ -373,7 +373,51 @@ namespace Test
...
@@ -373,7 +373,51 @@ namespace Test
}
}
return
true
;
return
true
;
}
}
}
TEST
CloneScalar
()
{
YAML
::
Node
node
=
YAML
::
Load
(
"!foo monkey"
);
YAML
::
Node
clone
=
Clone
(
node
);
YAML_ASSERT
(
!
(
node
==
clone
));
YAML_ASSERT
(
node
.
as
<
std
::
string
>
()
==
clone
.
as
<
std
::
string
>
());
YAML_ASSERT
(
node
.
Tag
()
==
clone
.
Tag
());
return
true
;
}
TEST
CloneSeq
()
{
YAML
::
Node
node
=
YAML
::
Load
(
"[1, 3, 5, 7]"
);
YAML
::
Node
clone
=
Clone
(
node
);
YAML_ASSERT
(
!
(
node
==
clone
));
YAML_ASSERT
(
clone
.
Type
()
==
YAML
::
NodeType
::
Sequence
);
YAML_ASSERT
(
node
.
size
()
==
clone
.
size
());
for
(
std
::
size_t
i
=
0
;
i
<
node
.
size
();
i
++
)
YAML_ASSERT
(
node
[
i
].
as
<
int
>
()
==
clone
[
i
].
as
<
int
>
());
return
true
;
}
TEST
CloneMap
()
{
YAML
::
Node
node
=
YAML
::
Load
(
"{foo: bar}"
);
YAML
::
Node
clone
=
Clone
(
node
);
YAML_ASSERT
(
!
(
node
==
clone
));
YAML_ASSERT
(
clone
.
Type
()
==
YAML
::
NodeType
::
Map
);
YAML_ASSERT
(
node
.
size
()
==
clone
.
size
());
YAML_ASSERT
(
node
[
"foo"
].
as
<
std
::
string
>
()
==
clone
[
"foo"
].
as
<
std
::
string
>
());
return
true
;
}
TEST
CloneAlias
()
{
YAML
::
Node
node
=
YAML
::
Load
(
"&foo [*foo]"
);
YAML
::
Node
clone
=
Clone
(
node
);
YAML_ASSERT
(
!
(
node
==
clone
));
YAML_ASSERT
(
clone
.
Type
()
==
YAML
::
NodeType
::
Sequence
);
YAML_ASSERT
(
node
.
size
()
==
clone
.
size
());
YAML_ASSERT
(
clone
==
clone
[
0
]);
return
true
;
}
}
void
RunNodeTest
(
TEST
(
*
test
)(),
const
std
::
string
&
name
,
int
&
passed
,
int
&
total
)
{
void
RunNodeTest
(
TEST
(
*
test
)(),
const
std
::
string
&
name
,
int
&
passed
,
int
&
total
)
{
TEST
ret
;
TEST
ret
;
...
@@ -426,6 +470,10 @@ namespace Test
...
@@ -426,6 +470,10 @@ namespace Test
RunNodeTest
(
&
Node
::
IterateMap
,
"iterate map"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
IterateMap
,
"iterate map"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
ForEach
,
"for each"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
ForEach
,
"for each"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
ForEachMap
,
"for each map"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
ForEachMap
,
"for each map"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
CloneScalar
,
"clone scalar"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
CloneSeq
,
"clone seq"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
CloneMap
,
"clone map"
,
passed
,
total
);
RunNodeTest
(
&
Node
::
CloneAlias
,
"clone alias"
,
passed
,
total
);
std
::
cout
<<
"Node tests: "
<<
passed
<<
"/"
<<
total
<<
" passed
\n
"
;
std
::
cout
<<
"Node tests: "
<<
passed
<<
"/"
<<
total
<<
" passed
\n
"
;
return
passed
==
total
;
return
passed
==
total
;
...
...
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