Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
srefgeqfeqrfg
arduino-esp32
提交
0fa66722
A
arduino-esp32
项目概览
srefgeqfeqrfg
/
arduino-esp32
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
arduino-esp32
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
0fa66722
编写于
2月 08, 2023
作者:
D
David McCurley
提交者:
GitHub
2月 08, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
WString Return bool (#7774)
上级
d03217af
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
92 addition
and
90 deletion
+92
-90
cores/esp32/WString.cpp
cores/esp32/WString.cpp
+57
-55
cores/esp32/WString.h
cores/esp32/WString.h
+35
-35
未找到文件。
cores/esp32/WString.cpp
浏览文件 @
0fa66722
...
...
@@ -176,26 +176,25 @@ void String::invalidate(void) {
init
();
}
unsigned
char
String
::
reserve
(
unsigned
int
size
)
{
bool
String
::
reserve
(
unsigned
int
size
)
{
if
(
buffer
()
&&
capacity
()
>=
size
)
return
1
;
return
true
;
if
(
changeBuffer
(
size
))
{
if
(
len
()
==
0
)
wbuffer
()[
0
]
=
0
;
return
1
;
return
true
;
}
return
0
;
return
false
;
}
unsigned
char
String
::
changeBuffer
(
unsigned
int
maxStrLen
)
{
bool
String
::
changeBuffer
(
unsigned
int
maxStrLen
)
{
// Can we use SSO here to avoid allocation?
if
(
maxStrLen
<
sizeof
(
sso
.
buff
)
-
1
)
{
if
(
isSSO
()
||
!
buffer
())
{
// Already using SSO, nothing to do
uint16_t
oldLen
=
len
();
uint16_t
oldLen
=
len
();
setSSO
(
true
);
setLen
(
oldLen
);
return
1
;
}
else
{
// if bufptr && !isSSO()
// Using bufptr, need to shrink into sso.buff
char
temp
[
sizeof
(
sso
.
buff
)];
...
...
@@ -205,8 +204,8 @@ unsigned char String::changeBuffer(unsigned int maxStrLen) {
setSSO
(
true
);
memcpy
(
wbuffer
(),
temp
,
maxStrLen
);
setLen
(
oldLen
);
return
1
;
}
return
true
;
}
// Fallthrough to normal allocator
size_t
newSize
=
(
maxStrLen
+
16
)
&
(
~
0xf
);
...
...
@@ -230,9 +229,9 @@ unsigned char String::changeBuffer(unsigned int maxStrLen) {
setCapacity
(
newSize
-
1
);
setBuffer
(
newbuffer
);
setLen
(
oldLen
);
// Needed in case of SSO where len() never existed
return
1
;
return
true
;
}
return
0
;
return
false
;
}
// /*********************************************/
...
...
@@ -338,34 +337,34 @@ String & String::operator =(const __FlashStringHelper *pstr) {
// /* concat */
// /*********************************************/
unsigned
char
String
::
concat
(
const
String
&
s
)
{
bool
String
::
concat
(
const
String
&
s
)
{
// Special case if we're concatting ourself (s += s;) since we may end up
// realloc'ing the buffer and moving s.buffer in the method called
if
(
&
s
==
this
)
{
unsigned
int
newlen
=
2
*
len
();
if
(
!
s
.
buffer
())
return
0
;
return
false
;
if
(
s
.
len
()
==
0
)
return
1
;
return
true
;
if
(
!
reserve
(
newlen
))
return
0
;
return
false
;
memmove
(
wbuffer
()
+
len
(),
buffer
(),
len
());
setLen
(
newlen
);
wbuffer
()[
len
()]
=
0
;
return
1
;
return
true
;
}
else
{
return
concat
(
s
.
buffer
(),
s
.
len
());
}
}
unsigned
char
String
::
concat
(
const
char
*
cstr
,
unsigned
int
length
)
{
bool
String
::
concat
(
const
char
*
cstr
,
unsigned
int
length
)
{
unsigned
int
newlen
=
len
()
+
length
;
if
(
!
cstr
)
return
0
;
return
false
;
if
(
length
==
0
)
return
1
;
return
true
;
if
(
!
reserve
(
newlen
))
return
0
;
return
false
;
if
(
cstr
>=
wbuffer
()
&&
cstr
<
wbuffer
()
+
len
())
// compatible with SSO in ram #6155 (case "x += x.c_str()")
memmove
(
wbuffer
()
+
len
(),
cstr
,
length
+
1
);
...
...
@@ -373,79 +372,82 @@ unsigned char String::concat(const char *cstr, unsigned int length) {
// compatible with source in flash #6367
memcpy_P
(
wbuffer
()
+
len
(),
cstr
,
length
+
1
);
setLen
(
newlen
);
return
1
;
return
true
;
}
unsigned
char
String
::
concat
(
const
char
*
cstr
)
{
bool
String
::
concat
(
const
char
*
cstr
)
{
if
(
!
cstr
)
return
0
;
return
false
;
return
concat
(
cstr
,
strlen
(
cstr
));
}
unsigned
char
String
::
concat
(
char
c
)
{
bool
String
::
concat
(
char
c
)
{
char
buf
[]
=
{
c
,
'\0'
};
return
concat
(
buf
,
1
);
}
unsigned
char
String
::
concat
(
unsigned
char
num
)
{
bool
String
::
concat
(
unsigned
char
num
)
{
char
buf
[
1
+
3
*
sizeof
(
unsigned
char
)];
return
concat
(
buf
,
sprintf
(
buf
,
"%d"
,
num
));
}
unsigned
char
String
::
concat
(
int
num
)
{
bool
String
::
concat
(
int
num
)
{
char
buf
[
2
+
3
*
sizeof
(
int
)];
return
concat
(
buf
,
sprintf
(
buf
,
"%d"
,
num
));
}
unsigned
char
String
::
concat
(
unsigned
int
num
)
{
bool
String
::
concat
(
unsigned
int
num
)
{
char
buf
[
1
+
3
*
sizeof
(
unsigned
int
)];
utoa
(
num
,
buf
,
10
);
return
concat
(
buf
,
strlen
(
buf
));
}
unsigned
char
String
::
concat
(
long
num
)
{
bool
String
::
concat
(
long
num
)
{
char
buf
[
2
+
3
*
sizeof
(
long
)];
return
concat
(
buf
,
sprintf
(
buf
,
"%ld"
,
num
));
}
unsigned
char
String
::
concat
(
unsigned
long
num
)
{
bool
String
::
concat
(
unsigned
long
num
)
{
char
buf
[
1
+
3
*
sizeof
(
unsigned
long
)];
ultoa
(
num
,
buf
,
10
);
return
concat
(
buf
,
strlen
(
buf
));
}
unsigned
char
String
::
concat
(
float
num
)
{
bool
String
::
concat
(
float
num
)
{
char
buf
[
20
];
char
*
string
=
dtostrf
(
num
,
4
,
2
,
buf
);
return
concat
(
string
,
strlen
(
string
));
}
unsigned
char
String
::
concat
(
double
num
)
{
bool
String
::
concat
(
double
num
)
{
char
buf
[
20
];
char
*
string
=
dtostrf
(
num
,
4
,
2
,
buf
);
return
concat
(
string
,
strlen
(
string
));
}
unsigned
char
String
::
concat
(
long
long
num
)
{
bool
String
::
concat
(
long
long
num
)
{
char
buf
[
2
+
3
*
sizeof
(
long
long
)];
return
concat
(
buf
,
sprintf
(
buf
,
"%lld"
,
num
));
// NOT SURE - NewLib Nano ... does it support %lld?
}
unsigned
char
String
::
concat
(
unsigned
long
long
num
)
{
bool
String
::
concat
(
unsigned
long
long
num
)
{
char
buf
[
1
+
3
*
sizeof
(
unsigned
long
long
)];
ulltoa
(
num
,
buf
,
10
);
return
concat
(
buf
,
strlen
(
buf
));
}
unsigned
char
String
::
concat
(
const
__FlashStringHelper
*
str
)
{
if
(
!
str
)
return
0
;
bool
String
::
concat
(
const
__FlashStringHelper
*
str
)
{
if
(
!
str
)
return
false
;
int
length
=
strlen_P
((
PGM_P
)
str
);
if
(
length
==
0
)
return
1
;
if
(
length
==
0
)
return
true
;
unsigned
int
newlen
=
len
()
+
length
;
if
(
!
reserve
(
newlen
))
return
0
;
if
(
!
reserve
(
newlen
))
return
false
;
memcpy_P
(
wbuffer
()
+
len
(),
(
PGM_P
)
str
,
length
+
1
);
setLen
(
newlen
);
return
1
;
return
true
;
}
/*********************************************/
...
...
@@ -559,11 +561,11 @@ int String::compareTo(const String &s) const {
return
strcmp
(
buffer
(),
s
.
buffer
());
}
unsigned
char
String
::
equals
(
const
String
&
s2
)
const
{
bool
String
::
equals
(
const
String
&
s2
)
const
{
return
(
len
()
==
s2
.
len
()
&&
compareTo
(
s2
)
==
0
);
}
unsigned
char
String
::
equals
(
const
char
*
cstr
)
const
{
bool
String
::
equals
(
const
char
*
cstr
)
const
{
if
(
len
()
==
0
)
return
(
cstr
==
NULL
||
*
cstr
==
0
);
if
(
cstr
==
NULL
)
...
...
@@ -571,36 +573,36 @@ unsigned char String::equals(const char *cstr) const {
return
strcmp
(
buffer
(),
cstr
)
==
0
;
}
unsigned
char
String
::
operator
<
(
const
String
&
rhs
)
const
{
bool
String
::
operator
<
(
const
String
&
rhs
)
const
{
return
compareTo
(
rhs
)
<
0
;
}
unsigned
char
String
::
operator
>
(
const
String
&
rhs
)
const
{
bool
String
::
operator
>
(
const
String
&
rhs
)
const
{
return
compareTo
(
rhs
)
>
0
;
}
unsigned
char
String
::
operator
<=
(
const
String
&
rhs
)
const
{
bool
String
::
operator
<=
(
const
String
&
rhs
)
const
{
return
compareTo
(
rhs
)
<=
0
;
}
unsigned
char
String
::
operator
>=
(
const
String
&
rhs
)
const
{
bool
String
::
operator
>=
(
const
String
&
rhs
)
const
{
return
compareTo
(
rhs
)
>=
0
;
}
unsigned
char
String
::
equalsIgnoreCase
(
const
String
&
s2
)
const
{
bool
String
::
equalsIgnoreCase
(
const
String
&
s2
)
const
{
if
(
this
==
&
s2
)
return
1
;
return
true
;
if
(
len
()
!=
s2
.
len
())
return
0
;
return
false
;
if
(
len
()
==
0
)
return
1
;
return
true
;
const
char
*
p1
=
buffer
();
const
char
*
p2
=
s2
.
buffer
();
while
(
*
p1
)
{
if
(
tolower
(
*
p1
++
)
!=
tolower
(
*
p2
++
))
return
0
;
return
false
;
}
return
1
;
return
true
;
}
unsigned
char
String
::
equalsConstantTime
(
const
String
&
s2
)
const
{
...
...
@@ -630,21 +632,21 @@ unsigned char String::equalsConstantTime(const String &s2) const {
return
(
equalcond
&
diffcond
);
//bitwise AND
}
unsigned
char
String
::
startsWith
(
const
String
&
s2
)
const
{
bool
String
::
startsWith
(
const
String
&
s2
)
const
{
if
(
len
()
<
s2
.
len
())
return
0
;
return
false
;
return
startsWith
(
s2
,
0
);
}
unsigned
char
String
::
startsWith
(
const
String
&
s2
,
unsigned
int
offset
)
const
{
bool
String
::
startsWith
(
const
String
&
s2
,
unsigned
int
offset
)
const
{
if
(
offset
>
(
unsigned
)(
len
()
-
s2
.
len
())
||
!
buffer
()
||
!
s2
.
buffer
())
return
0
;
return
false
;
return
strncmp
(
&
buffer
()[
offset
],
s2
.
buffer
(),
s2
.
len
())
==
0
;
}
unsigned
char
String
::
endsWith
(
const
String
&
s2
)
const
{
bool
String
::
endsWith
(
const
String
&
s2
)
const
{
if
(
len
()
<
s2
.
len
()
||
!
buffer
()
||
!
s2
.
buffer
())
return
0
;
return
false
;
return
strcmp
(
&
buffer
()[
len
()
-
s2
.
len
()],
s2
.
buffer
())
==
0
;
}
...
...
cores/esp32/WString.h
浏览文件 @
0fa66722
...
...
@@ -81,7 +81,7 @@ class String {
// return true on success, false on failure (in which case, the string
// is left unchanged). reserve(0), if successful, will validate an
// invalid string (i.e., "if (s)" will be true afterwards)
unsigned
char
reserve
(
unsigned
int
size
);
bool
reserve
(
unsigned
int
size
);
inline
unsigned
int
length
(
void
)
const
{
if
(
buffer
())
{
return
len
();
...
...
@@ -112,21 +112,21 @@ class String {
// returns true on success, false on failure (in which case, the string
// is left unchanged). if the argument is null or invalid, the
// concatenation is considered unsuccessful.
unsigned
char
concat
(
const
String
&
str
);
unsigned
char
concat
(
const
char
*
cstr
);
unsigned
char
concat
(
const
char
*
cstr
,
unsigned
int
length
);
unsigned
char
concat
(
const
uint8_t
*
cstr
,
unsigned
int
length
)
{
return
concat
((
const
char
*
)
cstr
,
length
);}
unsigned
char
concat
(
char
c
);
unsigned
char
concat
(
unsigned
char
c
);
unsigned
char
concat
(
int
num
);
unsigned
char
concat
(
unsigned
int
num
);
unsigned
char
concat
(
long
num
);
unsigned
char
concat
(
unsigned
long
num
);
unsigned
char
concat
(
float
num
);
unsigned
char
concat
(
double
num
);
unsigned
char
concat
(
long
long
num
);
unsigned
char
concat
(
unsigned
long
long
num
);
unsigned
char
concat
(
const
__FlashStringHelper
*
str
);
bool
concat
(
const
String
&
str
);
bool
concat
(
const
char
*
cstr
);
bool
concat
(
const
char
*
cstr
,
unsigned
int
length
);
bool
concat
(
const
uint8_t
*
cstr
,
unsigned
int
length
)
{
return
concat
((
const
char
*
)
cstr
,
length
);}
bool
concat
(
char
c
);
bool
concat
(
unsigned
char
c
);
bool
concat
(
int
num
);
bool
concat
(
unsigned
int
num
);
bool
concat
(
long
num
);
bool
concat
(
unsigned
long
num
);
bool
concat
(
float
num
);
bool
concat
(
double
num
);
bool
concat
(
long
long
num
);
bool
concat
(
unsigned
long
long
num
);
bool
concat
(
const
__FlashStringHelper
*
str
);
// if there's not enough memory for the concatenated value, the string
// will be left unchanged (but this isn't signalled in any way)
...
...
@@ -202,39 +202,39 @@ class String {
return
buffer
()
?
&
String
::
StringIfHelper
:
0
;
}
int
compareTo
(
const
String
&
s
)
const
;
unsigned
char
equals
(
const
String
&
s
)
const
;
unsigned
char
equals
(
const
char
*
cstr
)
const
;
unsigned
char
operator
==
(
const
String
&
rhs
)
const
{
bool
equals
(
const
String
&
s
)
const
;
bool
equals
(
const
char
*
cstr
)
const
;
bool
operator
==
(
const
String
&
rhs
)
const
{
return
equals
(
rhs
);
}
unsigned
char
operator
==
(
const
char
*
cstr
)
const
{
bool
operator
==
(
const
char
*
cstr
)
const
{
return
equals
(
cstr
);
}
unsigned
char
operator
!=
(
const
String
&
rhs
)
const
{
bool
operator
!=
(
const
String
&
rhs
)
const
{
return
!
equals
(
rhs
);
}
unsigned
char
operator
!=
(
const
char
*
cstr
)
const
{
bool
operator
!=
(
const
char
*
cstr
)
const
{
return
!
equals
(
cstr
);
}
unsigned
char
operator
<
(
const
String
&
rhs
)
const
;
unsigned
char
operator
>
(
const
String
&
rhs
)
const
;
unsigned
char
operator
<=
(
const
String
&
rhs
)
const
;
unsigned
char
operator
>=
(
const
String
&
rhs
)
const
;
unsigned
char
equalsIgnoreCase
(
const
String
&
s
)
const
;
bool
operator
<
(
const
String
&
rhs
)
const
;
bool
operator
>
(
const
String
&
rhs
)
const
;
bool
operator
<=
(
const
String
&
rhs
)
const
;
bool
operator
>=
(
const
String
&
rhs
)
const
;
bool
equalsIgnoreCase
(
const
String
&
s
)
const
;
unsigned
char
equalsConstantTime
(
const
String
&
s
)
const
;
unsigned
char
startsWith
(
const
String
&
prefix
)
const
;
unsigned
char
startsWith
(
const
char
*
prefix
)
const
{
bool
startsWith
(
const
String
&
prefix
)
const
;
bool
startsWith
(
const
char
*
prefix
)
const
{
return
this
->
startsWith
(
String
(
prefix
));
}
unsigned
char
startsWith
(
const
__FlashStringHelper
*
prefix
)
const
{
bool
startsWith
(
const
__FlashStringHelper
*
prefix
)
const
{
return
this
->
startsWith
(
String
(
prefix
));
}
unsigned
char
startsWith
(
const
String
&
prefix
,
unsigned
int
offset
)
const
;
unsigned
char
endsWith
(
const
String
&
suffix
)
const
;
unsigned
char
endsWith
(
const
char
*
suffix
)
const
{
bool
startsWith
(
const
String
&
prefix
,
unsigned
int
offset
)
const
;
bool
endsWith
(
const
String
&
suffix
)
const
;
bool
endsWith
(
const
char
*
suffix
)
const
{
return
this
->
endsWith
(
String
(
suffix
));
}
unsigned
char
endsWith
(
const
__FlashStringHelper
*
suffix
)
const
{
bool
endsWith
(
const
__FlashStringHelper
*
suffix
)
const
{
return
this
->
endsWith
(
String
(
suffix
));
}
...
...
@@ -345,7 +345,7 @@ class String {
protected:
void
init
(
void
);
void
invalidate
(
void
);
unsigned
char
changeBuffer
(
unsigned
int
maxStrLen
);
bool
changeBuffer
(
unsigned
int
maxStrLen
);
// copy and move
String
&
copy
(
const
char
*
cstr
,
unsigned
int
length
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录