Go to the documentation of this file.
62 #ifndef ABSL_STRINGS_INTERNAL_MEMUTIL_H_
63 #define ABSL_STRINGS_INTERNAL_MEMUTIL_H_
68 #include "absl/base/port.h"
69 #include "absl/strings/ascii.h"
73 namespace strings_internal {
75 inline char*
memcat(
char*
dest,
size_t destlen,
const char* src,
77 return reinterpret_cast<char*
>(
memcpy(
dest + destlen, src, srclen));
81 char*
memdup(
const char* s,
size_t slen);
82 char*
memrchr(
const char* s,
int c,
size_t slen);
83 size_t memspn(
const char* s,
size_t slen,
const char* accept);
84 size_t memcspn(
const char* s,
size_t slen,
const char*
reject);
85 char*
mempbrk(
const char* s,
size_t slen,
const char* accept);
88 template <
bool case_sensitive>
90 const char* needle,
size_t neelen) {
94 const char* hayend = haystack + haylen;
95 const char* needlestart = needle;
96 const char* needleend = needlestart + neelen;
98 for (; haystack < hayend; ++haystack) {
99 char hay = case_sensitive
102 char nee = case_sensitive
106 if (++needle == needleend) {
107 return haystack + 1 - neelen;
109 }
else if (needle != needlestart) {
111 haystack -= needle - needlestart;
112 needle = needlestart;
119 inline const char*
memstr(
const char* phaystack,
size_t haylen,
120 const char* pneedle) {
121 return int_memmatch<true>(phaystack, haylen, pneedle, strlen(pneedle));
124 inline const char*
memcasestr(
const char* phaystack,
size_t haylen,
125 const char* pneedle) {
126 return int_memmatch<false>(phaystack, haylen, pneedle, strlen(pneedle));
129 inline const char*
memmem(
const char* phaystack,
size_t haylen,
130 const char* pneedle,
size_t needlelen) {
131 return int_memmatch<true>(phaystack, haylen, pneedle, needlelen);
134 inline const char*
memcasemem(
const char* phaystack,
size_t haylen,
135 const char* pneedle,
size_t needlelen) {
136 return int_memmatch<false>(phaystack, haylen, pneedle, needlelen);
141 const char*
memmatch(
const char* phaystack,
size_t haylen,
const char* pneedle,
148 #endif // ABSL_STRINGS_INTERNAL_MEMUTIL_H_
char ascii_tolower(unsigned char c)
const char * memmem(const char *phaystack, size_t haylen, const char *pneedle, size_t needlelen)
int memcasecmp(const char *s1, const char *s2, size_t len)
const char * memcasestr(const char *phaystack, size_t haylen, const char *pneedle)
#define ABSL_NAMESPACE_END
char * memrchr(const char *s, int c, size_t slen)
const char * memcasemem(const char *phaystack, size_t haylen, const char *pneedle, size_t needlelen)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
#define ABSL_NAMESPACE_BEGIN
const char * int_memmatch(const char *haystack, size_t haylen, const char *needle, size_t neelen)
char * memdup(const char *s, size_t slen)
char * mempbrk(const char *s, size_t slen, const char *accept)
const char * memstr(const char *phaystack, size_t haylen, const char *pneedle)
const char * memmatch(const char *phaystack, size_t haylen, const char *pneedle, size_t neelen)
size_t memcspn(const char *s, size_t slen, const char *reject)
char * memcat(char *dest, size_t destlen, const char *src, size_t srclen)
size_t memspn(const char *s, size_t slen, const char *accept)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:24