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
a03af5dd
Commit
a03af5dd
authored
Sep 11, 2011
by
Jesse Beder
Browse files
Implemented the map size computation
parent
b50264e7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
28 additions
and
5 deletions
+28
-5
include/yaml-cpp/node/detail/impl.h
include/yaml-cpp/node/detail/impl.h
+1
-1
include/yaml-cpp/node/detail/node_data.h
include/yaml-cpp/node/detail/node_data.h
+5
-0
src/node/detail/node_data.cpp
src/node/detail/node_data.cpp
+19
-4
test/new-api/nodetests.cpp
test/new-api/nodetests.cpp
+3
-0
No files found.
include/yaml-cpp/node/detail/impl.h
View file @
a03af5dd
...
@@ -54,7 +54,7 @@ namespace YAML
...
@@ -54,7 +54,7 @@ namespace YAML
node
&
k
=
convert_to_node
(
key
,
pMemory
);
node
&
k
=
convert_to_node
(
key
,
pMemory
);
node
&
v
=
pMemory
->
create_node
();
node
&
v
=
pMemory
->
create_node
();
m_map
[
&
k
]
=
&
v
;
insert_map_pair
(
k
,
v
)
;
return
v
;
return
v
;
}
}
...
...
include/yaml-cpp/node/detail/node_data.h
View file @
a03af5dd
...
@@ -64,6 +64,7 @@ namespace YAML
...
@@ -64,6 +64,7 @@ namespace YAML
void
reset_sequence
();
void
reset_sequence
();
void
reset_map
();
void
reset_map
();
void
insert_map_pair
(
node
&
key
,
node
&
value
);
void
convert_sequence_to_map
(
shared_memory_holder
pMemory
);
void
convert_sequence_to_map
(
shared_memory_holder
pMemory
);
template
<
typename
T
>
template
<
typename
T
>
...
@@ -88,6 +89,10 @@ namespace YAML
...
@@ -88,6 +89,10 @@ namespace YAML
// map
// map
typedef
std
::
map
<
node
*
,
node
*>
node_map
;
typedef
std
::
map
<
node
*
,
node
*>
node_map
;
node_map
m_map
;
node_map
m_map
;
typedef
std
::
pair
<
node
*
,
node
*>
kv_pair
;
typedef
std
::
list
<
kv_pair
>
kv_pairs
;
mutable
kv_pairs
m_undefinedPairs
;
};
};
}
}
}
}
...
...
src/node/detail/node_data.cpp
View file @
a03af5dd
...
@@ -75,7 +75,7 @@ namespace YAML
...
@@ -75,7 +75,7 @@ namespace YAML
switch
(
m_type
)
{
switch
(
m_type
)
{
case
NodeType
::
Sequence
:
compute_seq_size
();
return
m_seqSize
;
case
NodeType
::
Sequence
:
compute_seq_size
();
return
m_seqSize
;
case
NodeType
::
Map
:
compute_map_size
();
return
m_map
.
size
();
case
NodeType
::
Map
:
compute_map_size
();
return
m_map
.
size
()
-
m_undefinedPairs
.
size
()
;
default:
default:
return
0
;
return
0
;
}
}
...
@@ -90,6 +90,13 @@ namespace YAML
...
@@ -90,6 +90,13 @@ namespace YAML
void
node_data
::
compute_map_size
()
const
void
node_data
::
compute_map_size
()
const
{
{
kv_pairs
::
iterator
it
=
m_undefinedPairs
.
begin
();
while
(
it
!=
m_undefinedPairs
.
end
())
{
kv_pairs
::
iterator
jt
=
boost
::
next
(
it
);
if
(
it
->
first
->
is_defined
()
&&
it
->
second
->
is_defined
())
m_undefinedPairs
.
erase
(
it
);
it
=
jt
;
}
}
}
const_node_iterator
node_data
::
begin
()
const
const_node_iterator
node_data
::
begin
()
const
...
@@ -166,7 +173,7 @@ namespace YAML
...
@@ -166,7 +173,7 @@ namespace YAML
if
(
m_type
!=
NodeType
::
Map
)
if
(
m_type
!=
NodeType
::
Map
)
throw
std
::
runtime_error
(
"Can't insert into a non-map node"
);
throw
std
::
runtime_error
(
"Can't insert into a non-map node"
);
m_map
[
&
key
]
=
&
value
;
insert_map_pair
(
key
,
value
)
;
}
}
// indexing
// indexing
...
@@ -205,7 +212,7 @@ namespace YAML
...
@@ -205,7 +212,7 @@ namespace YAML
}
}
node
&
value
=
pMemory
->
create_node
();
node
&
value
=
pMemory
->
create_node
();
m_map
[
&
key
]
=
&
value
;
insert_map_pair
(
key
,
value
)
;
return
value
;
return
value
;
}
}
...
@@ -233,6 +240,14 @@ namespace YAML
...
@@ -233,6 +240,14 @@ namespace YAML
void
node_data
::
reset_map
()
void
node_data
::
reset_map
()
{
{
m_map
.
clear
();
m_map
.
clear
();
m_undefinedPairs
.
clear
();
}
void
node_data
::
insert_map_pair
(
node
&
key
,
node
&
value
)
{
m_map
[
&
key
]
=
&
value
;
if
(
!
key
.
is_defined
()
||
!
value
.
is_defined
())
m_undefinedPairs
.
push_back
(
kv_pair
(
&
key
,
&
value
));
}
}
void
node_data
::
convert_sequence_to_map
(
shared_memory_holder
pMemory
)
void
node_data
::
convert_sequence_to_map
(
shared_memory_holder
pMemory
)
...
@@ -246,7 +261,7 @@ namespace YAML
...
@@ -246,7 +261,7 @@ namespace YAML
node
&
key
=
pMemory
->
create_node
();
node
&
key
=
pMemory
->
create_node
();
key
.
set_scalar
(
stream
.
str
());
key
.
set_scalar
(
stream
.
str
());
m_map
[
&
key
]
=
m_sequence
[
i
];
insert_map_pair
(
key
,
*
m_sequence
[
i
]
)
;
}
}
reset_sequence
();
reset_sequence
();
...
...
test/new-api/nodetests.cpp
View file @
a03af5dd
...
@@ -67,6 +67,9 @@ namespace Test
...
@@ -67,6 +67,9 @@ namespace Test
YAML_ASSERT
(
node
.
Type
()
==
YAML
::
NodeType
::
Map
);
YAML_ASSERT
(
node
.
Type
()
==
YAML
::
NodeType
::
Map
);
YAML_ASSERT
(
node
[
"key"
].
as
<
std
::
string
>
()
==
"value"
);
YAML_ASSERT
(
node
[
"key"
].
as
<
std
::
string
>
()
==
"value"
);
YAML_ASSERT
(
node
.
size
()
==
1
);
YAML_ASSERT
(
node
.
size
()
==
1
);
node
[
"undefined"
]
=
"monkey"
;
YAML_ASSERT
(
node
[
"undefined"
].
as
<
std
::
string
>
()
==
"monkey"
);
YAML_ASSERT
(
node
.
size
()
==
2
);
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