Skip to content

Commit a608127

Browse files
committed
Change void to std::tuple
1 parent 330a9ce commit a608127

File tree

2 files changed

+18
-63
lines changed

2 files changed

+18
-63
lines changed

py_string.hpp

+11-51
Original file line numberDiff line numberDiff line change
@@ -551,10 +551,7 @@ template <class _Elme> class basic_string : public std::basic_string<_Elme> {
551551
basic_string<_Elme> lower(void) const noexcept;
552552
basic_string<_Elme> lstrip(void) const;
553553
basic_string<_Elme> lstrip(basic_string<_Elme> chars) const;
554-
void partition(basic_string<_Elme> sep, basic_string<_Elme> &dst1,
555-
basic_string<_Elme> &dst2, basic_string<_Elme> &dst3) const;
556-
template <typename _Iterable>
557-
void partition(basic_string<_Elme> sep, _Iterable &iterable) const;
554+
std::tuple<basic_string<_Elme>, basic_string<_Elme>, basic_string<_Elme>> partition(basic_string<_Elme> sep) const;
558555
basic_string<_Elme>
559556
pyreplace(basic_string<_Elme> old, basic_string<_Elme> _new,
560557
size_t count = std::numeric_limits<size_t>::max()) const;
@@ -563,10 +560,7 @@ template <class _Elme> class basic_string : public std::basic_string<_Elme> {
563560
int rindex(basic_string<_Elme> sub, int start = 0,
564561
int end = std::numeric_limits<int>::max()) const;
565562
basic_string<_Elme> rjust(size_t width, _Elme fillchar = ' ') const;
566-
void rpartition(basic_string<_Elme> sep, basic_string<_Elme> &dst1,
567-
basic_string<_Elme> &dst2, basic_string<_Elme> &dst3) const;
568-
template <typename _Iterable>
569-
void rpartition(basic_string<_Elme> sep, _Iterable &iterable) const;
563+
std::tuple<basic_string<_Elme>, basic_string<_Elme>, basic_string<_Elme>> rpartition(basic_string<_Elme> sep) const;
570564

571565
template <typename _Iterable>
572566
void rsplit(_Iterable &dst,
@@ -966,30 +960,13 @@ basic_string<_Elme> basic_string<_Elme>::lstrip(basic_string<_Elme> chars) const
966960
return this->substr(std::distance(this->begin(), itr));
967961
}
968962
template <class _Elme>
969-
void basic_string<_Elme>::partition(basic_string<_Elme> sep,
970-
basic_string<_Elme> &dst1,
971-
basic_string<_Elme> &dst2,
972-
basic_string<_Elme> &dst3) const
963+
std::tuple<basic_string<_Elme>, basic_string<_Elme>, basic_string<_Elme>> basic_string<_Elme>::partition(basic_string<_Elme> sep) const
973964
{
974-
size_t index = this->find(sep);
965+
auto index = this->find(sep);
975966
if (index == std::basic_string<_Elme>::npos) {
976-
dst1 = *this;
977-
dst2 = "";
978-
dst3 = "";
979-
} else {
980-
dst1 = this->substr(0, index);
981-
dst2 = sep;
982-
dst3 = this->substr(index + sep.size());
967+
return std::make_tuple(*this, "", "");
983968
}
984-
}
985-
template <class _Elme>
986-
template <typename _Iterable>
987-
void basic_string<_Elme>::partition(basic_string<_Elme> sep,
988-
_Iterable &iterable) const
989-
{
990-
basic_string<_Elme> dst1, dst2, dst3;
991-
this->partition(sep, dst1, dst2, dst3);
992-
iterable = { dst1, dst2, dst3 };
969+
return std::make_tuple(this->substr(0, index), sep, this->substr(index + sep.size()));
993970
}
994971
template <class _Elme>
995972
basic_string<_Elme> basic_string<_Elme>::pyreplace(basic_string<_Elme> old,
@@ -1042,30 +1019,13 @@ basic_string<_Elme> basic_string<_Elme>::rjust(size_t width,
10421019
}
10431020

10441021
template <class _Elme>
1045-
void basic_string<_Elme>::rpartition(basic_string<_Elme> sep,
1046-
basic_string<_Elme> &dst1,
1047-
basic_string<_Elme> &dst2,
1048-
basic_string<_Elme> &dst3) const
1022+
std::tuple<basic_string<_Elme>, basic_string<_Elme>, basic_string<_Elme>> basic_string<_Elme>::rpartition(basic_string<_Elme> sep) const
10491023
{
1050-
auto index = this->pyrfind(sep);
1051-
if (index == -1) {
1052-
dst1 = "";
1053-
dst2 = "";
1054-
dst3 = *this;
1055-
} else {
1056-
dst1 = this->substr(0, index);
1057-
dst2 = sep;
1058-
dst3 = this->substr(index + sep.size());
1024+
auto index = this->rfind(sep);
1025+
if (index == std::string::npos) {
1026+
return std::make_tuple("", "", *this);
10591027
}
1060-
}
1061-
template <class _Elme>
1062-
template <typename _Iterable>
1063-
void basic_string<_Elme>::rpartition(basic_string<_Elme> sep,
1064-
_Iterable &iterable) const
1065-
{
1066-
basic_string<_Elme> dst1, dst2, dst3;
1067-
this->rpartition(sep, dst1, dst2, dst3);
1068-
iterable = { dst1, dst2, dst3 };
1028+
return std::make_tuple(this->substr(0, index), sep, this->substr(index + sep.size()));
10691029
}
10701030
template <class _Elme>
10711031
template <typename _Iterable>

test/test.cpp

+7-12
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,12 @@ BOOST_AUTO_TEST_CASE(lstrip)
297297
BOOST_AUTO_TEST_CASE(partition)
298298
{
299299
using py::string;
300-
using std::vector;
300+
using std::make_tuple;
301+
301302
string str = "1-2-3-4-5";
302-
vector<string> tmp = {};
303-
str.partition("-", tmp);
304303

305-
BOOST_CHECK(tmp == (vector<string> { "1", "-", "2-3-4-5" }));
306-
str.partition("p", tmp);
307-
BOOST_CHECK(tmp == (vector<string> { "1-2-3-4-5", "", "" }));
304+
BOOST_CHECK(str.partition("-") == make_tuple("1", "-", "2-3-4-5"));
305+
BOOST_CHECK(str.partition("p") == make_tuple("1-2-3-4-5", "", "" ));
308306
}
309307

310308
BOOST_AUTO_TEST_CASE(replace)
@@ -344,15 +342,12 @@ BOOST_AUTO_TEST_CASE(rjust)
344342
BOOST_AUTO_TEST_CASE(rpartition)
345343
{
346344
using py::string;
347-
using std::vector;
345+
using std::make_tuple;
348346

349347
string str = "1-2-3-4-5";
350-
vector<string> tmp = {};
351-
str.rpartition("-", tmp);
352348

353-
BOOST_CHECK(tmp == (vector<string> { "1-2-3-4", "-", "5" }));
354-
str.rpartition("p", tmp);
355-
BOOST_CHECK(tmp == (vector<string> { "", "", "1-2-3-4-5" }));
349+
BOOST_CHECK(str.rpartition("-") == make_tuple("1-2-3-4", "-", "5"));
350+
BOOST_CHECK(str.rpartition("p") == make_tuple("", "", "1-2-3-4-5"));
356351
}
357352

358353
BOOST_AUTO_TEST_CASE(rsplit)

0 commit comments

Comments
 (0)