Commit 1034506c authored by Tudor Bosman's avatar Tudor Bosman

Minor changes to folly/experimental/io

Reviewed By: philipp@fb.com

FB internal diff: D491952
parent 2e76cb01
......@@ -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);
}
......
......@@ -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());
/**
......
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment