1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Copyright 2020, Intel Corporation
//
// Modified to test pmem::obj containers
//
#ifndef LIBPMEMOBJ_CPP_TESTS_EMPLACEABLE_H
#define LIBPMEMOBJ_CPP_TESTS_EMPLACEABLE_H
#include <functional>
class Emplaceable {
Emplaceable(const Emplaceable &);
Emplaceable &operator=(const Emplaceable &);
int int_;
double double_;
public:
Emplaceable() : int_(0), double_(0)
{
}
Emplaceable(int i, double d) : int_(i), double_(d)
{
}
Emplaceable(Emplaceable &&x) : int_(x.int_), double_(x.double_)
{
x.int_ = 0;
x.double_ = 0;
}
Emplaceable &
operator=(Emplaceable &&x)
{
int_ = x.int_;
x.int_ = 0;
double_ = x.double_;
x.double_ = 0;
return *this;
}
bool
operator==(const Emplaceable &x) const
{
return int_ == x.int_ && double_ == x.double_;
}
bool
operator<(const Emplaceable &x) const
{
return int_ < x.int_ || (int_ == x.int_ && double_ < x.double_);
}
int
get() const
{
return int_;
}
};
namespace std
{
template <>
struct hash<Emplaceable> {
typedef Emplaceable argument_type;
typedef std::size_t result_type;
std::size_t
operator()(const Emplaceable &x) const
{
return static_cast<std::size_t>(x.get());
}
};
}
#endif // LIBPMEMOBJ_CPP_TESTS_EMPLACEABLE_H
|