Skip to content

Commit 83eb70d

Browse files
authored
Merge pull request #807 from redboltz/fix_806
Fixed #806.
2 parents 3129326 + 70f950a commit 83eb70d

22 files changed

+203
-112
lines changed

example/boost/msgpack_variant_mapbased.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ int main() {
8383
u.address = "Tokyo";
8484
msgpack::pack(ss, u);
8585

86-
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
86+
std::string const& str = ss.str();
87+
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
8788
msgpack::object const& obj = oh.get();
8889
std::cout << "Unpacked msgpack object." << std::endl;
8990
std::cout << obj << std::endl;

example/cpp03/class_intrusive.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,11 @@ int main() {
8282
std::stringstream ss;
8383
msgpack::pack(ss, my);
8484

85-
print(ss.str());
85+
std::string const& str = ss.str();
86+
print(str);
8687

8788
msgpack::object_handle oh =
88-
msgpack::unpack(ss.str().data(), ss.str().size());
89+
msgpack::unpack(str.data(), str.size());
8990
msgpack::object obj = oh.get();
9091
std::cout << obj << std::endl;
9192
assert(obj.as<my_class>() == my);

example/cpp03/class_intrusive_map.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ int main() {
5959

6060
print(ss.str());
6161

62+
std::string const& str = ss.str();
6263
msgpack::object_handle oh =
63-
msgpack::unpack(ss.str().data(), ss.str().size());
64+
msgpack::unpack(str.data(), str.size());
6465
msgpack::object obj = oh.get();
6566
std::cout << obj << std::endl;
6667
assert(obj.as<my_class>() == my);

example/cpp03/class_non_intrusive.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,11 @@ int main() {
100100
std::stringstream ss;
101101
msgpack::pack(ss, my);
102102

103-
print(ss.str());
103+
std::string const& str = ss.str();
104+
print(str);
104105

105106
msgpack::object_handle oh =
106-
msgpack::unpack(ss.str().data(), ss.str().size());
107+
msgpack::unpack(str.data(), str.size());
107108
msgpack::object obj = oh.get();
108109
std::cout << obj << std::endl;
109110
assert(obj.as<my_class>() == my);

example/cpp03/map_based_versionup.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ int main() {
7171

7272
print(ss.str());
7373

74-
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
74+
std::string const& str = ss.str();
75+
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
7576

7677
msgpack::object obj = oh.get();
7778
std::cout << obj << std::endl;

example/cpp03/reuse_zone.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,13 @@ int main() {
3131
std::size_t offset = 0;
3232

3333
// msgpack array is constructed on z.
34-
msgpack::object obj = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset);
34+
std::string const& ps = ss.str();
35+
msgpack::object obj = msgpack::unpack(z, ps.data(), ps.size(), offset);
3536
std::cout << obj << std::endl;
3637
assert(obj.as<std::vector<int> >() == v);
3738

3839
// msgpack str is constructed on z.
39-
std::string const& str = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset).as<std::string>();
40+
std::string const& str = msgpack::unpack(z, ps.data(), ps.size(), offset).as<std::string>();
4041
std::cout << str << std::endl;
4142
assert(str == s);
4243
}

example/cpp11/container.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ void tuple() {
3737
std::stringstream ss;
3838
msgpack::pack(ss, t);
3939

40-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
40+
auto const& str = ss.str();
41+
auto oh = msgpack::unpack(str.data(), str.size());
4142
auto obj = oh.get();
4243

4344
std::cout << obj << std::endl;
@@ -49,7 +50,8 @@ void unordered_map() {
4950
std::stringstream ss;
5051
msgpack::pack(ss, m);
5152

52-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
53+
auto const& str = ss.str();
54+
auto oh = msgpack::unpack(str.data(), str.size());
5355
msgpack::object obj = oh.get();
5456

5557
std::cout << obj << std::endl;
@@ -61,7 +63,8 @@ void unordered_set() {
6163
std::stringstream ss;
6264
msgpack::pack(ss, s);
6365

64-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
66+
auto const& str = ss.str();
67+
auto oh = msgpack::unpack(str.data(), str.size());
6568
auto obj = oh.get();
6669

6770
std::cout << obj << std::endl;
@@ -74,7 +77,8 @@ void forward_list() {
7477
std::stringstream ss;
7578
msgpack::pack(ss, f);
7679

77-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
80+
auto const& str = ss.str();
81+
auto oh = msgpack::unpack(str.data(), str.size());
7882
auto obj = oh.get();
7983

8084
std::cout << obj << std::endl;
@@ -98,39 +102,44 @@ void combi() {
98102
std::size_t offset = 0;
99103
std::cout << "offset: " << offset << std::endl;
100104
{
101-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
105+
auto const& str = ss.str();
106+
auto oh = msgpack::unpack(str.data(), str.size(), offset);
102107
auto obj = oh.get();
103108

104109
std::cout << obj << std::endl;
105110
assert(obj.as<decltype(a)>() == a);
106111
}
107112
std::cout << "offset: " << offset << std::endl;
108113
{
109-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
114+
auto const& str = ss.str();
115+
auto oh = msgpack::unpack(str.data(), str.size(), offset);
110116
auto obj = oh.get();
111117

112118
std::cout << obj << std::endl;
113119
assert(obj.as<decltype(t)>() == t);
114120
}
115121
std::cout << "offset: " << offset << std::endl;
116122
{
117-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
123+
auto const& str = ss.str();
124+
auto oh = msgpack::unpack(str.data(), str.size(), offset);
118125
auto obj = oh.get();
119126

120127
std::cout << obj << std::endl;
121128
assert(obj.as<decltype(m)>() == m);
122129
}
123130
std::cout << "offset: " << offset << std::endl;
124131
{
125-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
132+
auto const& str = ss.str();
133+
auto oh = msgpack::unpack(str.data(), str.size(), offset);
126134
auto obj = oh.get();
127135

128136
std::cout << obj << std::endl;
129137
assert(obj.as<decltype(s)>() == s);
130138
}
131139
std::cout << "offset: " << offset << std::endl;
132140
{
133-
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
141+
auto const& str = ss.str();
142+
auto oh = msgpack::unpack(str.data(), str.size(), offset);
134143
auto obj = oh.get();
135144

136145
std::cout << obj << std::endl;

test/array_ref.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_vector_char)
2525
std::stringstream ss;
2626
msgpack::pack(ss, ar1);
2727

28+
std::string const& str = ss.str();
2829
msgpack::object_handle oh =
29-
msgpack::unpack(ss.str().data(), ss.str().size());
30+
msgpack::unpack(str.data(), str.size());
3031
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
3132
std::vector<char> v2;
3233
msgpack::type::array_ref<std::vector<char> > ar2(v2);
@@ -47,8 +48,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_vector_char_const)
4748
std::stringstream ss;
4849
msgpack::pack(ss, ar1);
4950

51+
std::string const& str = ss.str();
5052
msgpack::object_handle oh =
51-
msgpack::unpack(ss.str().data(), ss.str().size());
53+
msgpack::unpack(str.data(), str.size());
5254
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
5355
std::vector<char> v2;
5456
msgpack::type::array_ref<std::vector<char> > ar2(v2);
@@ -67,8 +69,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_vector_unsigned_char)
6769
std::stringstream ss;
6870
msgpack::pack(ss, ar1);
6971

72+
std::string const& str = ss.str();
7073
msgpack::object_handle oh =
71-
msgpack::unpack(ss.str().data(), ss.str().size());
74+
msgpack::unpack(str.data(), str.size());
7275
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
7376
std::vector<unsigned char> v2;
7477
msgpack::type::array_ref<std::vector<unsigned char> > ar2(v2);
@@ -89,8 +92,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_vector_unsigned_char_const)
8992
std::stringstream ss;
9093
msgpack::pack(ss, ar1);
9194

95+
std::string const& str = ss.str();
9296
msgpack::object_handle oh =
93-
msgpack::unpack(ss.str().data(), ss.str().size());
97+
msgpack::unpack(str.data(), str.size());
9498
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
9599
std::vector<unsigned char> v2;
96100
msgpack::type::array_ref<std::vector<unsigned char> > ar2(v2);
@@ -184,8 +188,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_array_char)
184188
std::stringstream ss;
185189
msgpack::pack(ss, ar1);
186190

191+
std::string const& str = ss.str();
187192
msgpack::object_handle oh =
188-
msgpack::unpack(ss.str().data(), ss.str().size());
193+
msgpack::unpack(str.data(), str.size());
189194
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
190195
std::array<char, 3> v2;
191196
msgpack::type::array_ref<std::array<char, 3> > ar2(v2);
@@ -203,8 +208,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_array_char_const)
203208
std::stringstream ss;
204209
msgpack::pack(ss, ar1);
205210

211+
std::string const& str = ss.str();
206212
msgpack::object_handle oh =
207-
msgpack::unpack(ss.str().data(), ss.str().size());
213+
msgpack::unpack(str.data(), str.size());
208214
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
209215
std::array<char, 3> v2;
210216
msgpack::type::array_ref<std::array<char, 3> > ar2(v2);
@@ -220,8 +226,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_array_unsigned_char)
220226
std::stringstream ss;
221227
msgpack::pack(ss, ar1);
222228

229+
std::string const& str = ss.str();
223230
msgpack::object_handle oh =
224-
msgpack::unpack(ss.str().data(), ss.str().size());
231+
msgpack::unpack(str.data(), str.size());
225232
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
226233
std::array<unsigned char, 3> v2;
227234
msgpack::type::array_ref<std::array<unsigned char, 3> > ar2(v2);
@@ -239,8 +246,9 @@ TEST(MSGPACK_ARRAY_REF, pack_unpack_convert_array_unsigned_char_const)
239246
std::stringstream ss;
240247
msgpack::pack(ss, ar1);
241248

249+
std::string const& str = ss.str();
242250
msgpack::object_handle oh =
243-
msgpack::unpack(ss.str().data(), ss.str().size());
251+
msgpack::unpack(str.data(), str.size());
244252
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
245253
std::array<unsigned char, 3> v2;
246254
msgpack::type::array_ref<std::array<unsigned char, 3> > ar2(v2);

test/boost_fusion.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ TEST(MSGPACK_BOOST, fusion_pack_unpack_convert)
3535
val1.f1 = 42;
3636
val1.f2 = 123.45;
3737
msgpack::pack(ss, val1);
38+
std::string const& str = ss.str();
3839
msgpack::object_handle oh =
39-
msgpack::unpack(ss.str().data(), ss.str().size());
40+
msgpack::unpack(str.data(), str.size());
4041
mystruct val2 = oh.get().as<mystruct>();
4142
EXPECT_TRUE(val1.f1 == val2.f1);
4243
EXPECT_TRUE(fabs(val2.f2 - val1.f2) <= kEPS);
@@ -156,8 +157,9 @@ TEST(MSGPACK_BOOST, pack_convert_no_def_con)
156157
std::stringstream ss;
157158
mystruct_no_def_con val1(no_def_con1(1), no_def_con2(2), no_def_con1(3));
158159
msgpack::pack(ss, val1);
160+
std::string const& str = ss.str();
159161
msgpack::object_handle oh =
160-
msgpack::unpack(ss.str().data(), ss.str().size());
162+
msgpack::unpack(str.data(), str.size());
161163
mystruct_no_def_con val2 = oh.get().as<mystruct_no_def_con>();
162164
EXPECT_TRUE(val1 == val2);
163165
}
@@ -207,8 +209,9 @@ TEST(MSGPACK_BOOST, pack_convert_no_def_con_def_con)
207209
std::stringstream ss;
208210
mystruct_no_def_con_def_con val1(no_def_con1(1), no_def_con2(2), 3);
209211
msgpack::pack(ss, val1);
212+
std::string const& str = ss.str();
210213
msgpack::object_handle oh =
211-
msgpack::unpack(ss.str().data(), ss.str().size());
214+
msgpack::unpack(str.data(), str.size());
212215
mystruct_no_def_con_def_con val2 = oh.get().as<mystruct_no_def_con_def_con>();
213216
EXPECT_TRUE(val1 == val2);
214217
}
@@ -224,8 +227,9 @@ TEST(MSGPACK_BOOST, fusion_pack_unpack_convert_pair)
224227
std::stringstream ss;
225228
std::pair<bool, int> val1(false, 42);
226229
msgpack::pack(ss, val1);
230+
std::string const& str = ss.str();
227231
msgpack::object_handle oh =
228-
msgpack::unpack(ss.str().data(), ss.str().size());
232+
msgpack::unpack(str.data(), str.size());
229233
std::pair<bool, int> val2 = oh.get().as<std::pair<bool, int> >();
230234
EXPECT_TRUE(val1.first == val2.first);
231235
EXPECT_TRUE(val1.second == val2.second);
@@ -240,8 +244,9 @@ TEST(MSGPACK_BOOST, fusion_pack_unpack_convert_tuple)
240244
std::stringstream ss;
241245
std::tuple<bool, int> val1(false, 42);
242246
msgpack::pack(ss, val1);
247+
std::string const& str = ss.str();
243248
msgpack::object_handle oh =
244-
msgpack::unpack(ss.str().data(), ss.str().size());
249+
msgpack::unpack(str.data(), str.size());
245250
std::tuple<bool, int> val2 = oh.get().as<std::tuple<bool, int> >();
246251
EXPECT_TRUE(val1 == val2);
247252
}

test/boost_optional.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ TEST(MSGPACK_BOOST, pack_convert_nil)
2121
std::stringstream ss;
2222
boost::optional<int> val1;
2323
msgpack::pack(ss, val1);
24+
std::string const& str = ss.str();
2425
msgpack::object_handle oh =
25-
msgpack::unpack(ss.str().data(), ss.str().size());
26+
msgpack::unpack(str.data(), str.size());
2627
boost::optional<int> val2 = oh.get().as<boost::optional<int> >();
2728
EXPECT_TRUE(val1 == val2);
2829
}
@@ -32,8 +33,9 @@ TEST(MSGPACK_BOOST, pack_convert_int)
3233
std::stringstream ss;
3334
boost::optional<int> val1 = 1;
3435
msgpack::pack(ss, val1);
36+
std::string const& str = ss.str();
3537
msgpack::object_handle oh =
36-
msgpack::unpack(ss.str().data(), ss.str().size());
38+
msgpack::unpack(str.data(), str.size());
3739
boost::optional<int> val2 = oh.get().as<boost::optional<int> >();
3840
EXPECT_TRUE(val1 == val2);
3941
}
@@ -49,8 +51,9 @@ TEST(MSGPACK_BOOST, pack_convert_vector)
4951
v.push_back(3);
5052
val1 = v;
5153
msgpack::pack(ss, val1);
54+
std::string const& str = ss.str();
5255
msgpack::object_handle oh =
53-
msgpack::unpack(ss.str().data(), ss.str().size());
56+
msgpack::unpack(str.data(), str.size());
5457
ovi_t val2 = oh.get().as<ovi_t>();
5558
EXPECT_TRUE(val1 == val2);
5659
}
@@ -64,8 +67,9 @@ TEST(MSGPACK_BOOST, pack_convert_vector_optional)
6467
val1[0] = 1;
6568
val1[2] = 3;
6669
msgpack::pack(ss, val1);
70+
std::string const& str = ss.str();
6771
msgpack::object_handle oh =
68-
msgpack::unpack(ss.str().data(), ss.str().size());
72+
msgpack::unpack(str.data(), str.size());
6973
voi_t val2 = oh.get().as<voi_t>();
7074
EXPECT_TRUE(val1 == val2);
7175
}
@@ -171,8 +175,9 @@ TEST(MSGPACK_BOOST, pack_convert_no_def_con)
171175
std::stringstream ss;
172176
boost::optional<no_def_con> val1 = no_def_con(1);
173177
msgpack::pack(ss, val1);
178+
std::string const& str = ss.str();
174179
msgpack::object_handle oh =
175-
msgpack::unpack(ss.str().data(), ss.str().size());
180+
msgpack::unpack(str.data(), str.size());
176181
boost::optional<no_def_con> val2 = oh.get().as<boost::optional<no_def_con>>();
177182
EXPECT_TRUE(val1 == val2);
178183
}

0 commit comments

Comments
 (0)