7 #ifndef swcdb_core_Comparators_h
8 #define swcdb_core_Comparators_h
106 Comp from(
const char** buf, uint32_t* remainp, uint8_t extended=0x00) noexcept;
120 const uint8_t *p2, uint32_t p2_len) noexcept {
121 int diff =
mem_cmp(p1, p2, p1_len < p2_len ? p1_len: p2_len);
133 const uint8_t *p2, uint32_t p2_len) noexcept {
140 : (!(diff =
mem_cmp(p1, p2, p1_len))
155 const uint8_t *p2, uint32_t p2_len) noexcept {
157 (p1, p1_len, p2, p2_len);
161 bool pf(
const uint8_t *p1, uint32_t p1_len,
162 const uint8_t *p2, uint32_t p2_len) noexcept {
163 return p1_len <= p2_len &&
mem_eq(p1, p2, p1_len);
168 const uint8_t *p2, uint32_t p2_len) noexcept {
169 int diff =
mem_cmp(p1, p2, p1_len < p2_len? p1_len: p2_len);
170 return diff < 0 || (!diff && p1_len < p2_len);
175 const uint8_t *p2, uint32_t p2_len) noexcept{
176 return p1_len < p2_len ||
177 (p1_len == p2_len &&
mem_cmp(p1, p2, p2_len) < 0);
182 const uint8_t *p2, uint32_t p2_len) noexcept {
183 int diff =
mem_cmp(p1, p2, p1_len < p2_len? p1_len: p2_len);
184 return diff < 0 || (!diff && p1_len <= p2_len);
189 const uint8_t *p2, uint32_t p2_len) noexcept {
190 return p1_len < p2_len ||
191 (p1_len == p2_len &&
mem_cmp(p1, p2, p2_len) <= 0);
195 bool eq(
const uint8_t *p1, uint32_t p1_len,
196 const uint8_t *p2, uint32_t p2_len) noexcept {
197 return p1_len == p2_len &&
mem_eq(p1, p2, p1_len);
202 const uint8_t *p2, uint32_t p2_len) noexcept {
203 int diff =
mem_cmp(p1, p2, p1_len < p2_len? p1_len: p2_len);
204 return diff > 0 || (!diff && p1_len >= p2_len);
209 const uint8_t *p2, uint32_t p2_len) noexcept {
210 return p1_len > p2_len ||
211 (p1_len == p2_len &&
mem_cmp(p1, p2, p1_len) >= 0);
216 const uint8_t *p2, uint32_t p2_len) noexcept {
217 int diff =
mem_cmp(p1, p2, p1_len < p2_len? p1_len: p2_len);
218 return diff > 0 || (!diff && p1_len > p2_len);
223 const uint8_t *p2, uint32_t p2_len) noexcept {
224 return p1_len > p2_len ||
225 (p1_len == p2_len &&
mem_cmp(p1, p2, p1_len) > 0);
229 bool ne(
const uint8_t* p1, uint32_t p1_len,
230 const uint8_t* p2, uint32_t p2_len) noexcept {
231 return !
eq(p1, p1_len, p2, p2_len);
235 bool re(
const re2::RE2& regex,
const re2::StringPiece& value);
238 bool re(
const re2::RE2& regex,
const char* v, uint32_t v_len) {
239 return v && v_len &&
re(regex, re2::StringPiece(v, v_len));
243 bool re(
const uint8_t* p1, uint32_t p1_len,
244 const uint8_t* p2, uint32_t p2_len) {
246 return !p2 || !p2_len;
248 re2::RE2(re2::StringPiece(
reinterpret_cast<const char*
>(p1), p1_len)),
249 reinterpret_cast<const char*
>(p2), p2_len
254 bool sbs(
const uint8_t* p1, uint32_t p1_len,
255 const uint8_t* p2, uint32_t p2_len) noexcept {
261 for(uint32_t count = p1_len; p2_len; ++p2, --p2_len) {
262 for(uint32_t i = 0; i < p1_len; ++i) {
263 if(!found[i] && p1[i] == *p2) {
276 const uint8_t* p2, uint32_t p2_len) noexcept {
279 const uint8_t* p1_end = p1 + p1_len;
280 const uint8_t* p2_end = p2 + p2_len;
281 for(; p1 < p1_end && p2 < p2_end; ++p2) {
290 const uint8_t* p2, uint32_t p2_len) noexcept {
294 const uint8_t* p1_end = p1 + p1_len;
295 const uint8_t* p2_end = p2 + p2_len;
296 for(; p1 < p1_end && p2 < p2_end; ++p2) {
309 const uint8_t* p1, uint32_t p1_len,
310 const uint8_t* p2, uint32_t p2_len) {
314 return pf(p1, p1_len, p2, p2_len);
317 return gt_lexic(p1, p1_len, p2, p2_len);
320 return ge_lexic(p1, p1_len, p2, p2_len);
323 return eq(p1, p1_len, p2, p2_len);
326 return le_lexic(p1, p1_len, p2, p2_len);
329 return lt_lexic(p1, p1_len, p2, p2_len);
332 return ne(p1, p1_len, p2, p2_len);
335 return re(p1, p1_len, p2, p2_len);
338 return sbs(p1, p1_len, p2, p2_len);
341 return sbs(p2, p2_len, p1, p1_len);
344 return po_sbs(p1, p1_len, p2, p2_len);
347 return po_sbs(p2, p2_len, p1, p1_len);
350 return fo_sbs(p1, p1_len, p2, p2_len);
353 return fo_sbs(p2, p2_len, p1, p1_len);
362 const uint8_t* p1, uint32_t p1_len,
363 const uint8_t* p2, uint32_t p2_len) {
367 return pf(p1, p1_len, p2, p2_len);
370 return gt_volume(p1, p1_len, p2, p2_len);
373 return ge_volume(p1, p1_len, p2, p2_len);
376 return eq(p1, p1_len, p2, p2_len);
379 return le_volume(p1, p1_len, p2, p2_len);
382 return lt_volume(p1, p1_len, p2, p2_len);
385 return ne(p1, p1_len, p2, p2_len);
388 return re(p1, p1_len, p2, p2_len);
391 return sbs(p1, p1_len, p2, p2_len);
394 return sbs(p2, p2_len, p1, p1_len);
397 return po_sbs(p1, p1_len, p2, p2_len);
400 return po_sbs(p2, p2_len, p1, p1_len);
403 return fo_sbs(p1, p1_len, p2, p2_len);
406 return fo_sbs(p2, p2_len, p1, p1_len);
417 const char *p1, uint32_t p1_len,
418 const char *p2, uint32_t p2_len) {
421 reinterpret_cast<const uint8_t*
>(p1), p1_len,
422 reinterpret_cast<const uint8_t*
>(p2), p2_len
428 const char *p1, uint32_t p1_len,
429 const char *p2, uint32_t p2_len) {
432 reinterpret_cast<const uint8_t*
>(p1), p1_len,
433 reinterpret_cast<const uint8_t*
>(p2), p2_len
440 const uint8_t *p1, uint32_t p1_len,
441 const uint8_t *p2, uint32_t p2_len) {
449 const char *p1, uint32_t p1_len,
450 const char *p2, uint32_t p2_len) {
453 reinterpret_cast<const uint8_t*
>(p1), p1_len,
454 reinterpret_cast<const uint8_t*
>(p2), p2_len
460 const uint8_t *p1, uint32_t p1_len,
461 const uint8_t *p2, uint32_t p2_len) {
465 return pf(p1, p1_len, p2, p2_len);
468 return gt_lexic(p1, p1_len, p2, p2_len);
471 return ge_lexic(p1, p1_len, p2, p2_len);
474 return eq(p1, p1_len, p2, p2_len);
477 return le_lexic(p1, p1_len, p2, p2_len);
480 return lt_lexic(p1, p1_len, p2, p2_len);
483 return ne(p1, p1_len, p2, p2_len);
486 return re(p1, p1_len, p2, p2_len);
489 return sbs(p1, p1_len, p2, p2_len);
492 return sbs(p2, p2_len, p1, p1_len);
495 return po_sbs(p1, p1_len, p2, p2_len);
498 return po_sbs(p2, p2_len, p1, p1_len);
501 return fo_sbs(p1, p1_len, p2, p2_len);
504 return fo_sbs(p2, p2_len, p1, p1_len);
507 return gt_volume(p1, p1_len, p2, p2_len);
510 return ge_volume(p1, p1_len, p2, p2_len);
513 return le_volume(p1, p1_len, p2, p2_len);
516 return lt_volume(p1, p1_len, p2, p2_len);
528 bool gt(
const T p1,
const T p2) noexcept {
534 bool ge(
const T p1,
const T p2) noexcept {
540 bool eq(
const T p1,
const T p2) noexcept {
546 bool le(
const T p1,
const T p2) noexcept {
552 bool lt(
const T p1,
const T p2) noexcept {
558 bool ne(
const T p1,
const T p2) noexcept {
564 bool sbs(
const T p1,
const T p2) noexcept {
565 return !p1 || (p2 % p1) == 0;
570 bool sbs(
const long double p1,
const long double p2) noexcept {
571 return !p1 || fmod(p2, p1) == 0;
577 return (p2 | p1) == p2;
582 bool fo_sbs(
const long double,
const long double) noexcept {
641 #ifdef SWC_IMPL_SOURCE
646 #endif // swcdb_core_Comparators_h