proxygen
folly::IOBufCompare Struct Reference

#include <IOBuf.h>

Inheritance diagram for folly::IOBufCompare:
folly::detail::cmp_pred< IOBufCompare, ordering::eq, 0 > folly::detail::cmp_pred< IOBufCompare, ordering::eq, 1 > folly::detail::cmp_pred< IOBufCompare, ordering::gt, 0 > folly::detail::cmp_pred< IOBufCompare, ordering::gt, 1 > folly::detail::cmp_pred< IOBufCompare, ordering::lt, 0 > folly::detail::cmp_pred< IOBufCompare, ordering::lt, 1 > folly::compare_equal_to< IOBufCompare > folly::compare_not_equal_to< IOBufCompare > folly::compare_greater< IOBufCompare > folly::compare_less_equal< IOBufCompare > folly::compare_less< IOBufCompare > folly::compare_greater_equal< IOBufCompare > folly::IOBufEqualTo folly::IOBufNotEqualTo folly::IOBufGreater folly::IOBufLessEqual folly::IOBufLess folly::IOBufGreaterEqual

Public Member Functions

ordering operator() (const IOBuf &a, const IOBuf &b) const
 
ordering operator() (const std::unique_ptr< IOBuf > &a, const std::unique_ptr< IOBuf > &b) const
 
ordering operator() (const IOBuf *a, const IOBuf *b) const
 

Private Member Functions

ordering impl (IOBuf const &a, IOBuf const &b) const noexcept
 

Detailed Description

Ordering for IOBuf objects. Compares data in the entire chain.

Definition at line 1523 of file IOBuf.h.

Member Function Documentation

ordering folly::IOBufCompare::impl ( IOBuf const &  a,
IOBuf const &  b 
) const
privatenoexcept

Definition at line 1108 of file IOBuf.cpp.

References a, b, folly::eq, min, folly::io::detail::CursorBase< Derived, BufType >::peekBytes(), folly::io::detail::CursorBase< Derived, BufType >::skip(), and folly::to_ordering().

1108  {
1109  io::Cursor ca(&a);
1110  io::Cursor cb(&b);
1111  for (;;) {
1112  auto ba = ca.peekBytes();
1113  auto bb = cb.peekBytes();
1114  if (ba.empty() || bb.empty()) {
1115  return to_ordering(int(bb.empty()) - int(ba.empty()));
1116  }
1117  const size_t n = std::min(ba.size(), bb.size());
1118  DCHECK_GT(n, 0u);
1119  const ordering r = to_ordering(std::memcmp(ba.data(), bb.data(), n));
1120  if (r != ordering::eq) {
1121  return r;
1122  }
1123  // Cursor::skip() may throw if n is too large, but n is not too large here
1124  ca.skip(n);
1125  cb.skip(n);
1126  }
1127 }
constexpr ordering to_ordering(T c)
Definition: Ordering.h:24
char b
LogLevel min
Definition: LogLevel.cpp:30
ordering
Definition: Ordering.h:21
char a
ordering folly::IOBufCompare::operator() ( const IOBuf a,
const IOBuf b 
) const
inline

Definition at line 1524 of file IOBuf.h.

1524  {
1525  return &a == &b ? ordering::eq : impl(a, b);
1526  }
char b
ordering impl(IOBuf const &a, IOBuf const &b) const noexcept
Definition: IOBuf.cpp:1108
char a
ordering folly::IOBufCompare::operator() ( const std::unique_ptr< IOBuf > &  a,
const std::unique_ptr< IOBuf > &  b 
) const
inline

Definition at line 1527 of file IOBuf.h.

1529  {
1530  return operator()(a.get(), b.get());
1531  }
ordering operator()(const IOBuf &a, const IOBuf &b) const
Definition: IOBuf.h:1524
ordering folly::IOBufCompare::operator() ( const IOBuf a,
const IOBuf b 
) const
inline

Definition at line 1532 of file IOBuf.h.

References a, b, and folly::pushmi::__adl::noexcept().

1532  {
1533  // clang-format off
1534  return
1535  !a && !b ? ordering::eq :
1536  !a && b ? ordering::lt :
1537  a && !b ? ordering::gt :
1538  operator()(*a, *b);
1539  // clang-format on
1540  }
char b
char a
ordering operator()(const IOBuf &a, const IOBuf &b) const
Definition: IOBuf.h:1524

The documentation for this struct was generated from the following files: