mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-26 16:30:56 +00:00
core-local array type conversions
Summary: try to clean up the type conversions and hope it passes on windows. one interesting thing I learned is that bitshift operations are special: in `x << y`, the result type depends only on the type of `x`, unlike most arithmetic operations where the result type depends on both operands' types. Closes https://github.com/facebook/rocksdb/pull/2277 Differential Revision: D5050145 Pulled By: ajkr fbshipit-source-id: f3309e77526ac9612c632bf93a62d99757af9a29
This commit is contained in:
parent
c2be434307
commit
bbe9ee7dd4
|
@ -38,23 +38,23 @@ class CoreLocalArray {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<T[]> data_;
|
std::unique_ptr<T[]> data_;
|
||||||
size_t size_shift_;
|
int size_shift_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
CoreLocalArray<T>::CoreLocalArray() {
|
CoreLocalArray<T>::CoreLocalArray() {
|
||||||
unsigned int num_cpus = std::thread::hardware_concurrency();
|
int num_cpus = static_cast<int>(std::thread::hardware_concurrency());
|
||||||
// find a power of two >= num_cpus and >= 8
|
// find a power of two >= num_cpus and >= 8
|
||||||
size_shift_ = 3;
|
size_shift_ = 3;
|
||||||
while (1u << size_shift_ < num_cpus) {
|
while (1 << size_shift_ < num_cpus) {
|
||||||
++size_shift_;
|
++size_shift_;
|
||||||
}
|
}
|
||||||
data_.reset(new T[1 << size_shift_]);
|
data_.reset(new T[static_cast<size_t>(1) << size_shift_]);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
size_t CoreLocalArray<T>::Size() const {
|
size_t CoreLocalArray<T>::Size() const {
|
||||||
return 1u << size_shift_;
|
return static_cast<size_t>(1) << size_shift_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -77,7 +77,7 @@ std::pair<T*, size_t> CoreLocalArray<T>::AccessElementAndIndex() const {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T* CoreLocalArray<T>::AccessAtCore(size_t core_idx) const {
|
T* CoreLocalArray<T>::AccessAtCore(size_t core_idx) const {
|
||||||
assert(core_idx < 1u << size_shift_);
|
assert(core_idx < static_cast<size_t>(1) << size_shift_);
|
||||||
return &data_[core_idx];
|
return &data_[core_idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue