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
535f81a3
Commit
535f81a3
authored
Sep 13, 2011
by
beder
Browse files
Added a convert<> specialization for YAML::_Null (so you can say node[YAML::Null])
parent
e61826e5
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
10 deletions
+21
-10
include/yaml-cpp/node/convert.h
include/yaml-cpp/node/convert.h
+15
-0
include/yaml-cpp/node/detail/impl.h
include/yaml-cpp/node/detail/impl.h
+1
-0
test/new-api/spectests.cpp
test/new-api/spectests.cpp
+5
-10
No files found.
include/yaml-cpp/node/convert.h
View file @
535f81a3
...
@@ -8,6 +8,7 @@
...
@@ -8,6 +8,7 @@
#include "yaml-cpp/node/node.h"
#include "yaml-cpp/node/node.h"
#include "yaml-cpp/node/iterator.h"
#include "yaml-cpp/node/iterator.h"
#include "yaml-cpp/null.h"
#include <list>
#include <list>
#include <map>
#include <map>
#include <sstream>
#include <sstream>
...
@@ -30,6 +31,17 @@ namespace YAML
...
@@ -30,6 +31,17 @@ namespace YAML
}
}
};
};
template
<
>
struct
convert
<
_Null
>
{
static
Node
encode
(
const
_Null
&
/* rhs */
)
{
return
Node
();
}
static
bool
decode
(
const
Node
&
node
,
_Null
&
/* rhs */
)
{
return
node
.
Type
()
==
NodeType
::
Null
;
}
};
#define YAML_DEFINE_CONVERT_STREAMABLE(type)\
#define YAML_DEFINE_CONVERT_STREAMABLE(type)\
template<>\
template<>\
struct convert<type> {\
struct convert<type> {\
...
@@ -66,6 +78,7 @@ namespace YAML
...
@@ -66,6 +78,7 @@ namespace YAML
#undef YAML_DEFINE_CONVERT_STREAMABLE
#undef YAML_DEFINE_CONVERT_STREAMABLE
// std::map
template
<
typename
K
,
typename
V
>
template
<
typename
K
,
typename
V
>
struct
convert
<
std
::
map
<
K
,
V
>
>
{
struct
convert
<
std
::
map
<
K
,
V
>
>
{
static
Node
encode
(
const
std
::
map
<
K
,
V
>&
rhs
)
{
static
Node
encode
(
const
std
::
map
<
K
,
V
>&
rhs
)
{
...
@@ -86,6 +99,7 @@ namespace YAML
...
@@ -86,6 +99,7 @@ namespace YAML
}
}
};
};
// std::vector
template
<
typename
T
>
template
<
typename
T
>
struct
convert
<
std
::
vector
<
T
>
>
{
struct
convert
<
std
::
vector
<
T
>
>
{
static
Node
encode
(
const
std
::
vector
<
T
>&
rhs
)
{
static
Node
encode
(
const
std
::
vector
<
T
>&
rhs
)
{
...
@@ -106,6 +120,7 @@ namespace YAML
...
@@ -106,6 +120,7 @@ namespace YAML
}
}
};
};
// std::list
template
<
typename
T
>
template
<
typename
T
>
struct
convert
<
std
::
list
<
T
>
>
{
struct
convert
<
std
::
list
<
T
>
>
{
static
Node
encode
(
const
std
::
list
<
T
>&
rhs
)
{
static
Node
encode
(
const
std
::
list
<
T
>&
rhs
)
{
...
...
include/yaml-cpp/node/detail/impl.h
View file @
535f81a3
...
@@ -132,6 +132,7 @@ namespace YAML
...
@@ -132,6 +132,7 @@ namespace YAML
inline
node
&
node_data
::
convert_to_node
(
const
T
&
rhs
,
shared_memory_holder
pMemory
)
inline
node
&
node_data
::
convert_to_node
(
const
T
&
rhs
,
shared_memory_holder
pMemory
)
{
{
Node
value
=
convert
<
T
>::
encode
(
rhs
);
Node
value
=
convert
<
T
>::
encode
(
rhs
);
value
.
EnsureNodeExists
();
pMemory
->
merge
(
*
value
.
m_pMemory
);
pMemory
->
merge
(
*
value
.
m_pMemory
);
return
*
value
.
m_pNode
;
return
*
value
.
m_pNode
;
}
}
...
...
test/new-api/spectests.cpp
View file @
535f81a3
...
@@ -558,8 +558,7 @@ namespace Test
...
@@ -558,8 +558,7 @@ namespace Test
YAML
::
Node
doc
=
YAML
::
Parse
(
ex7_3
);
YAML
::
Node
doc
=
YAML
::
Parse
(
ex7_3
);
YAML_ASSERT
(
doc
.
size
()
==
2
);
YAML_ASSERT
(
doc
.
size
()
==
2
);
YAML_ASSERT
(
doc
[
"foo"
].
Type
()
==
YAML
::
NodeType
::
Null
);
YAML_ASSERT
(
doc
[
"foo"
].
Type
()
==
YAML
::
NodeType
::
Null
);
// YAML_ASSERT(doc[YAML::as<.as<std::string>() == "bar");
YAML_ASSERT
(
doc
[
YAML
::
Null
].
as
<
std
::
string
>
()
==
"bar"
);
return
" null as a key not implemented"
;
return
true
;
return
true
;
}
}
...
@@ -692,8 +691,7 @@ namespace Test
...
@@ -692,8 +691,7 @@ namespace Test
YAML_ASSERT
(
doc
.
size
()
==
3
);
YAML_ASSERT
(
doc
.
size
()
==
3
);
YAML_ASSERT
(
doc
[
"explicit"
].
as
<
std
::
string
>
()
==
"entry"
);
YAML_ASSERT
(
doc
[
"explicit"
].
as
<
std
::
string
>
()
==
"entry"
);
YAML_ASSERT
(
doc
[
"implicit"
].
as
<
std
::
string
>
()
==
"entry"
);
YAML_ASSERT
(
doc
[
"implicit"
].
as
<
std
::
string
>
()
==
"entry"
);
// YAML_ASSERT(doc[YAML::as<.Type() == YAML::NodeType::Null);
YAML_ASSERT
(
doc
[
YAML
::
Null
].
Type
()
==
YAML
::
NodeType
::
Null
);
return
" null as a key not implemented"
;
return
true
;
return
true
;
}
}
...
@@ -704,8 +702,7 @@ namespace Test
...
@@ -704,8 +702,7 @@ namespace Test
YAML_ASSERT
(
doc
[
"unquoted"
].
as
<
std
::
string
>
()
==
"separate"
);
YAML_ASSERT
(
doc
[
"unquoted"
].
as
<
std
::
string
>
()
==
"separate"
);
YAML_ASSERT
(
doc
[
"http://foo.com"
].
Type
()
==
YAML
::
NodeType
::
Null
);
YAML_ASSERT
(
doc
[
"http://foo.com"
].
Type
()
==
YAML
::
NodeType
::
Null
);
YAML_ASSERT
(
doc
[
"omitted value"
].
Type
()
==
YAML
::
NodeType
::
Null
);
YAML_ASSERT
(
doc
[
"omitted value"
].
Type
()
==
YAML
::
NodeType
::
Null
);
// YAML_ASSERT(doc[YAML::as<.as<std::string>() == "omitted key");
YAML_ASSERT
(
doc
[
YAML
::
Null
].
as
<
std
::
string
>
()
==
"omitted key"
);
return
" null as a key not implemented"
;
return
true
;
return
true
;
}
}
...
@@ -746,8 +743,7 @@ namespace Test
...
@@ -746,8 +743,7 @@ namespace Test
YAML_ASSERT
(
doc
[
0
][
0
][
"YAML"
].
as
<
std
::
string
>
()
==
"separate"
);
YAML_ASSERT
(
doc
[
0
][
0
][
"YAML"
].
as
<
std
::
string
>
()
==
"separate"
);
YAML_ASSERT
(
doc
[
1
].
size
()
==
1
);
YAML_ASSERT
(
doc
[
1
].
size
()
==
1
);
YAML_ASSERT
(
doc
[
1
][
0
].
size
()
==
1
);
YAML_ASSERT
(
doc
[
1
][
0
].
size
()
==
1
);
// YAML_ASSERT(doc[1][0][YAML::as<.as<std::string>() == "empty key entry");
YAML_ASSERT
(
doc
[
1
][
0
][
YAML
::
Null
].
as
<
std
::
string
>
()
==
"empty key entry"
);
return
" null as a key not implemented"
;
YAML_ASSERT
(
doc
[
2
].
size
()
==
1
);
YAML_ASSERT
(
doc
[
2
].
size
()
==
1
);
YAML_ASSERT
(
doc
[
2
][
0
].
size
()
==
1
);
YAML_ASSERT
(
doc
[
2
][
0
].
size
()
==
1
);
...
@@ -989,8 +985,7 @@ namespace Test
...
@@ -989,8 +985,7 @@ namespace Test
YAML
::
Node
doc
=
YAML
::
Parse
(
ex8_18
);
YAML
::
Node
doc
=
YAML
::
Parse
(
ex8_18
);
YAML_ASSERT
(
doc
.
size
()
==
3
);
YAML_ASSERT
(
doc
.
size
()
==
3
);
YAML_ASSERT
(
doc
[
"plain key"
].
as
<
std
::
string
>
()
==
"in-line value"
);
YAML_ASSERT
(
doc
[
"plain key"
].
as
<
std
::
string
>
()
==
"in-line value"
);
// YAML_ASSERT(doc[YAML::Null].Type() == YAML::NodeType::Null);
YAML_ASSERT
(
doc
[
YAML
::
Null
].
Type
()
==
YAML
::
NodeType
::
Null
);
return
" null not implemented as key"
;
YAML_ASSERT
(
doc
[
"quoted key"
].
size
()
==
1
);
YAML_ASSERT
(
doc
[
"quoted key"
].
size
()
==
1
);
YAML_ASSERT
(
doc
[
"quoted key"
][
0
].
as
<
std
::
string
>
()
==
"entry"
);
YAML_ASSERT
(
doc
[
"quoted key"
][
0
].
as
<
std
::
string
>
()
==
"entry"
);
return
true
;
return
true
;
...
...
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