8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-24 08:03:03 +01:00
firebird-mirror/extern/re2/util/pod_array.h
Adriano dos Santos Fernandes 65f003da0d Import re2 version 2019-08-01.
2019-08-11 11:10:29 -03:00

56 lines
1014 B
C++

// Copyright 2018 The RE2 Authors. All Rights Reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
#ifndef UTIL_POD_ARRAY_H_
#define UTIL_POD_ARRAY_H_
#include <memory>
#include <type_traits>
namespace re2 {
template <typename T>
class PODArray {
public:
static_assert(std::is_pod<T>::value,
"T must be POD");
PODArray()
: ptr_() {}
explicit PODArray(int len)
: ptr_(std::allocator<T>().allocate(len), Deleter(len)) {}
T* data() const {
return ptr_.get();
}
int size() const {
return ptr_.get_deleter().len_;
}
T& operator[](int pos) const {
return ptr_[pos];
}
private:
struct Deleter {
Deleter()
: len_(0) {}
explicit Deleter(int len)
: len_(len) {}
void operator()(T* ptr) const {
std::allocator<T>().deallocate(ptr, len_);
}
int len_;
};
std::unique_ptr<T[], Deleter> ptr_;
};
} // namespace re2
#endif // UTIL_POD_ARRAY_H_