Skip to content
Browse files

Minor changes to folly/experimental/io

Reviewed By: philipp@fb.com

FB internal diff: D491952
  • Loading branch information...
1 parent 2e76cb0 commit 1034506c069b9f9c24266adfaab33c26ca174aef @tudor tudor committed
Showing with 53 additions and 0 deletions.
  1. +14 −0 folly/Bits.h
  2. +10 −0 folly/experimental/io/IOBufQueue.h
  3. +29 −0 folly/experimental/io/TypedIOBuf.h
View
14 folly/Bits.h
@@ -329,6 +329,20 @@ struct EndianInt : public detail::EndianIntBase<T> {
class Endian {
public:
+ enum class Order : uint8_t {
+ LITTLE,
+ BIG
+ };
+
+ static constexpr Order order =
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ Order::LITTLE;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+ Order::BIG;
+#else
+# error Your machine uses a weird endianness!
+#endif /* __BYTE_ORDER */
+
template <class T> static T swap(T x) {
return detail::EndianInt<T>::swap(x);
}
View
10 folly/experimental/io/IOBufQueue.h
@@ -36,6 +36,16 @@ class IOBufQueue {
bool cacheChainLength;
};
+ /**
+ * Commonly used Options, currently the only possible value other than
+ * the default.
+ */
+ static Options cacheChainLength() {
+ Options options;
+ options.cacheChainLength = true;
+ return options;
+ }
+
explicit IOBufQueue(const Options& options = Options());
/**
View
29 folly/experimental/io/TypedIOBuf.h
@@ -17,6 +17,8 @@
#ifndef FOLLY_IO_TYPEDIOBUF_H_
#define FOLLY_IO_TYPEDIOBUF_H_
+#include <algorithm>
+#include <iterator>
#include <type_traits>
#include "folly/experimental/io/IOBuf.h"
@@ -106,6 +108,33 @@ class TypedIOBuf {
buf_->reserve(smul(minHeadroom), smul(minTailroom));
}
+ /**
+ * Simple wrapper to make it easier to treat this TypedIOBuf as an array of
+ * T.
+ */
+ const T& operator[](ssize_t idx) const {
+ assert(idx >= 0 && idx < length());
+ return data()[idx];
+ }
+
+ /**
+ * Append one element.
+ */
+ void push(const T& data) {
+ push(&data, &data + 1);
+ }
+
+ /**
+ * Append multiple elements in a sequence; will call distance().
+ */
+ template <class IT>
+ void push(IT begin, IT end) {
+ auto n = std::distance(begin, end);
+ reserve(headroom(), n);
+ std::copy(begin, end, writableTail());
+ append(n);
+ }
+
// Movable
TypedIOBuf(TypedIOBuf&&) = default;
TypedIOBuf& operator=(TypedIOBuf&&) = default;

0 comments on commit 1034506

Please sign in to comment.
Something went wrong with that request. Please try again.