/*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <boost/iterator/iterator_adaptor.hpp>
-#include <folly/Portability.h>
#include <folly/ContainerTraits.h>
+#include <folly/Portability.h>
/**
* Code that aids in storing data aligned on block (possibly cache-line)
NS % alignof(T) == 0)>::type> {
typedef void type;
};
-} // namespace detail
+} // namespace detail
template <class T, size_t NS>
class Node<T, NS, typename detail::NodeValid<T,NS>::type> {
> type;
};
-} // namespace detail
+} // namespace detail
/**
* Wrapper around iterators to Node to return iterators to the underlying
lastCount_(lastCount) {
}
explicit Adaptor(size_t n, const value_type& value = value_type())
- : c_(Node::nodeCount(n), fullNode(value)),
- lastCount_(n % Node::kElementCount ?: Node::kElementCount) {
+ : c_(Node::nodeCount(n), fullNode(value)) {
+ const auto count = n % Node::kElementCount;
+ lastCount_ = count != 0 ? count : Node::kElementCount;
}
Adaptor(const Adaptor&) = default;
iterator end() {
auto it = iterator(c_.end());
if (lastCount_ != Node::kElementCount) {
- it -= (Node::kElementCount - lastCount_);
+ it -= difference_type(Node::kElementCount - lastCount_);
}
return it;
}
size_t lastCount_; // number of elements in last Node
};
-} // namespace padded
-} // namespace folly
+} // namespace padded
+} // namespace folly