Go to the documentation of this file.
45 #ifndef GOOGLE_PROTOBUF_STUBS_FASTMEM_H_
46 #define GOOGLE_PROTOBUF_STUBS_FASTMEM_H_
54 #include <google/protobuf/port_def.inc>
67 inline bool memeq(
const char*
a,
const char*
b,
size_t n) {
68 size_t n_rounded_down =
n & ~static_cast<size_t>(7);
69 if (PROTOBUF_PREDICT_FALSE(n_rounded_down == 0)) {
70 return memcmp(
a,
b,
n) == 0;
80 n = n_rounded_down - 8;
85 return memcmp(
a,
b,
n) == 0;
87 for (;
n >= 16;
n -= 16) {
102 return memcmp(
a,
b,
n);
104 const char* a_limit =
a +
n;
105 while (
a +
sizeof(
uint64) <= a_limit &&
110 if (
a +
sizeof(
uint32) <= a_limit &&
115 while (
a < a_limit) {
117 static_cast<int>(
static_cast<uint32>(*
a++) -
static_cast<uint32>(*
b++));
131 case 1: memcpy(
dst,
src, 1);
break;
132 case 2: memcpy(
dst,
src, 2);
break;
133 case 3: memcpy(
dst,
src, 3);
break;
134 case 4: memcpy(
dst,
src, 4);
break;
135 case 5: memcpy(
dst,
src, 5);
break;
136 case 6: memcpy(
dst,
src, 6);
break;
137 case 7: memcpy(
dst,
src, 7);
break;
138 case 8: memcpy(
dst,
src, 8);
break;
139 case 9: memcpy(
dst,
src, 9);
break;
140 case 10: memcpy(
dst,
src, 10);
break;
141 case 11: memcpy(
dst,
src, 11);
break;
142 case 12: memcpy(
dst,
src, 12);
break;
143 case 13: memcpy(
dst,
src, 13);
break;
144 case 14: memcpy(
dst,
src, 14);
break;
145 case 15: memcpy(
dst,
src, 15);
break;
146 case 16: memcpy(
dst,
src, 16);
break;
155 #include <google/protobuf/port_undef.inc>
157 #endif // GOOGLE_PROTOBUF_STUBS_FASTMEM_H_
int fastmemcmp_inlined(const char *a, const char *b, size_t n)
GLboolean GLboolean GLboolean b
uint32 GOOGLE_UNALIGNED_LOAD32(const void *p)
bool memeq(const char *a, const char *b, size_t n)
uint64 GOOGLE_UNALIGNED_LOAD64(const void *p)
void memcpy_inlined(char *dst, const char *src, size_t size)
GLboolean GLboolean GLboolean GLboolean a
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:51