Further unique_ref improvements
This commit is contained in:
parent
2fb61e7c71
commit
ed9f224f19
@ -28,6 +28,7 @@ namespace cpputils {
|
|||||||
template<class T, class D = std::default_delete<T>>
|
template<class T, class D = std::default_delete<T>>
|
||||||
class unique_ref final {
|
class unique_ref final {
|
||||||
public:
|
public:
|
||||||
|
// TODO Add assert != nullptr to all calls (also move constructors, ...) and test performance impact (maybe disable assertions in prod?)
|
||||||
using element_type = typename std::unique_ptr<T, D>::element_type;
|
using element_type = typename std::unique_ptr<T, D>::element_type;
|
||||||
using deleter_type = typename std::unique_ptr<T, D>::deleter_type;
|
using deleter_type = typename std::unique_ptr<T, D>::deleter_type;
|
||||||
using pointer = typename std::unique_ptr<T, D>::pointer;
|
using pointer = typename std::unique_ptr<T, D>::pointer;
|
||||||
@ -167,7 +168,7 @@ namespace std {
|
|||||||
// Allow using it in std::unordered_set / std::unordered_map
|
// Allow using it in std::unordered_set / std::unordered_map
|
||||||
template<class T, class D> struct hash<cpputils::unique_ref<T, D>> {
|
template<class T, class D> struct hash<cpputils::unique_ref<T, D>> {
|
||||||
size_t operator()(const cpputils::unique_ref<T, D> &ref) const noexcept {
|
size_t operator()(const cpputils::unique_ref<T, D> &ref) const noexcept {
|
||||||
return (size_t)_extract_ptr(ref);
|
return std::hash<typename cpputils::unique_ref<T,D>::pointer>()(_extract_ptr(ref));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -428,7 +428,7 @@ TEST_F(UniqueRefTest, NullptrIsLess2) {
|
|||||||
unique_ref<int> var1 = make_unique_ref<int>(3);
|
unique_ref<int> var1 = make_unique_ref<int>(3);
|
||||||
unique_ref<int> var2 = make_unique_ref<int>(3);
|
unique_ref<int> var2 = make_unique_ref<int>(3);
|
||||||
makeInvalid(std::move(var2));
|
makeInvalid(std::move(var2));
|
||||||
EXPECT_TRUE(std::less<unique_ref<int>>()(var2, var1));
|
EXPECT_FALSE(std::less<unique_ref<int>>()(var1, var2));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(UniqueRefTest, NullptrIsNotLessThanNullptr) {
|
TEST_F(UniqueRefTest, NullptrIsNotLessThanNullptr) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user