Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
B
brpc
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
brpc
Commits
cd02be84
Commit
cd02be84
authored
Dec 05, 2018
by
wanglun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
StringMultiSplitter not supporting '\0' separator
parent
f4f7fc39
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
3 additions
and
60 deletions
+3
-60
string_splitter.h
src/butil/string_splitter.h
+2
-7
string_splitter_inl.h
src/butil/string_splitter_inl.h
+1
-15
string_splitter_unittest.cpp
test/string_splitter_unittest.cpp
+0
-38
No files found.
src/butil/string_splitter.h
View file @
cd02be84
...
...
@@ -115,15 +115,11 @@ public:
// longer than this utility.
inline
StringMultiSplitter
(
const
char
*
input
,
const
char
*
separators
,
EmptyFieldAction
action
=
SKIP_EMPTY_FIELD
);
// Allows containing embedded '\0' characters, if str_end is not NULL.
// Allows containing embedded '\0' characters if str_end is not NULL.
// NOTE: `separators` cannot contain embedded '\0' character.
inline
StringMultiSplitter
(
const
char
*
str_begin
,
const
char
*
str_end
,
const
char
*
separators
,
EmptyFieldAction
action
=
SKIP_EMPTY_FIELD
);
// Allows separators containing '\0', if str_end and separators_end are
// both not NULL.
inline
StringMultiSplitter
(
const
char
*
str_begin
,
const
char
*
str_end
,
const
char
*
seps_begin
,
const
char
*
seps_end
,
EmptyFieldAction
action
=
SKIP_EMPTY_FIELD
);
// Move splitter forward.
inline
StringMultiSplitter
&
operator
++
();
...
...
@@ -160,7 +156,6 @@ private:
const
char
*
_tail
;
const
char
*
_str_tail
;
const
char
*
const
_seps
;
const
char
*
const
_seps_tail
;
const
EmptyFieldAction
_empty_field_action
;
};
...
...
src/butil/string_splitter_inl.h
View file @
cd02be84
...
...
@@ -167,7 +167,6 @@ StringMultiSplitter::StringMultiSplitter (
:
_head
(
str
)
,
_str_tail
(
NULL
)
,
_seps
(
seps
)
,
_seps_tail
(
NULL
)
,
_empty_field_action
(
action
)
{
init
();
}
...
...
@@ -178,18 +177,6 @@ StringMultiSplitter::StringMultiSplitter (
:
_head
(
str_begin
)
,
_str_tail
(
str_end
)
,
_seps
(
seps
)
,
_seps_tail
(
NULL
)
,
_empty_field_action
(
action
)
{
init
();
}
StringMultiSplitter
::
StringMultiSplitter
(
const
char
*
str_begin
,
const
char
*
str_end
,
const
char
*
seps_begin
,
const
char
*
seps_end
,
EmptyFieldAction
action
)
:
_head
(
str_begin
)
,
_str_tail
(
str_end
)
,
_seps
(
seps_begin
)
,
_seps_tail
(
seps_end
)
,
_empty_field_action
(
action
)
{
init
();
}
...
...
@@ -226,8 +213,7 @@ StringMultiSplitter StringMultiSplitter::operator++(int) {
}
bool
StringMultiSplitter
::
is_sep
(
char
c
)
const
{
for
(
const
char
*
p
=
_seps
;
(
_seps_tail
==
NULL
)
?
(
*
p
!=
'\0'
)
:
(
p
!=
_seps_tail
);
++
p
)
{
for
(
const
char
*
p
=
_seps
;
*
p
!=
'\0'
;
++
p
)
{
if
(
c
==
*
p
)
{
return
true
;
}
...
...
test/string_splitter_unittest.cpp
View file @
cd02be84
...
...
@@ -227,44 +227,6 @@ TEST_F(StringSplitterTest, number_list) {
ASSERT_FALSE
(
ss2
);
ASSERT_EQ
(
0ul
,
ss2
.
length
());
ASSERT_EQ
(
ss2
.
field
(),
str
+
str_len
);
// separators contains '\0'
const
char
*
seps
=
",
\0
"
;
const
size_t
seps_len
=
3
;
butil
::
StringMultiSplitter
ss3
(
str
,
str
+
str_len
,
seps
,
seps
+
seps_len
);
ASSERT_TRUE
(
ss3
);
ASSERT_EQ
(
3ul
,
ss3
.
length
());
ASSERT_FALSE
(
strncmp
(
ss3
.
field
(),
"123"
,
ss3
.
length
()));
ss3
++
;
ASSERT_TRUE
(
ss3
);
ASSERT_EQ
(
2ul
,
ss3
.
length
());
ASSERT_FALSE
(
strncmp
(
ss3
.
field
(),
"12"
,
ss3
.
length
()));
ss3
++
;
ASSERT_TRUE
(
ss3
);
ASSERT_EQ
(
1ul
,
ss3
.
length
());
ASSERT_FALSE
(
strncmp
(
ss3
.
field
(),
"1"
,
ss3
.
length
()));
ss3
++
;
ASSERT_TRUE
(
ss3
);
ASSERT_EQ
(
2ul
,
ss3
.
length
());
ASSERT_FALSE
(
strncmp
(
ss3
.
field
(),
"21"
,
ss3
.
length
()));
ss3
++
;
ASSERT_TRUE
(
ss3
);
ASSERT_EQ
(
4ul
,
ss3
.
length
());
ASSERT_FALSE
(
strncmp
(
ss3
.
field
(),
"4321"
,
ss3
.
length
()));
ss3
++
;
ASSERT_TRUE
(
ss3
);
ASSERT_EQ
(
2ul
,
ss3
.
length
());
ASSERT_FALSE
(
strncmp
(
ss3
.
field
(),
"56"
,
ss3
.
length
()));
++
ss3
;
ASSERT_FALSE
(
ss3
);
ASSERT_EQ
(
0ul
,
ss3
.
length
());
ASSERT_EQ
(
ss3
.
field
(),
str
+
str_len
);
}
TEST_F
(
StringSplitterTest
,
cast_type
)
{
...
...
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