1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TEST_MOVE_ONLY_INT_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_MOVE_ONLY_INT_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker namespace base { 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker // A move-only class that holds an integer. This is designed for testing 11*6777b538SAndroid Build Coastguard Worker // containers. See also CopyOnlyInt. 12*6777b538SAndroid Build Coastguard Worker class MoveOnlyInt { 13*6777b538SAndroid Build Coastguard Worker public: data_(data)14*6777b538SAndroid Build Coastguard Worker explicit MoveOnlyInt(int data = 1) : data_(data) {} MoveOnlyInt(MoveOnlyInt && other)15*6777b538SAndroid Build Coastguard Worker MoveOnlyInt(MoveOnlyInt&& other) : data_(other.data_) { other.data_ = 0; } 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker MoveOnlyInt(const MoveOnlyInt&) = delete; 18*6777b538SAndroid Build Coastguard Worker MoveOnlyInt& operator=(const MoveOnlyInt&) = delete; 19*6777b538SAndroid Build Coastguard Worker ~MoveOnlyInt()20*6777b538SAndroid Build Coastguard Worker ~MoveOnlyInt() { data_ = 0; } 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker MoveOnlyInt& operator=(MoveOnlyInt&& other) { 23*6777b538SAndroid Build Coastguard Worker data_ = other.data_; 24*6777b538SAndroid Build Coastguard Worker other.data_ = 0; 25*6777b538SAndroid Build Coastguard Worker return *this; 26*6777b538SAndroid Build Coastguard Worker } 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker friend bool operator==(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) { 29*6777b538SAndroid Build Coastguard Worker return lhs.data_ == rhs.data_; 30*6777b538SAndroid Build Coastguard Worker } 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker friend bool operator!=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) { 33*6777b538SAndroid Build Coastguard Worker return !operator==(lhs, rhs); 34*6777b538SAndroid Build Coastguard Worker } 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker friend bool operator<(const MoveOnlyInt& lhs, int rhs) { 37*6777b538SAndroid Build Coastguard Worker return lhs.data_ < rhs; 38*6777b538SAndroid Build Coastguard Worker } 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker friend bool operator<(int lhs, const MoveOnlyInt& rhs) { 41*6777b538SAndroid Build Coastguard Worker return lhs < rhs.data_; 42*6777b538SAndroid Build Coastguard Worker } 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker friend bool operator<(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) { 45*6777b538SAndroid Build Coastguard Worker return lhs.data_ < rhs.data_; 46*6777b538SAndroid Build Coastguard Worker } 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker friend bool operator>(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) { 49*6777b538SAndroid Build Coastguard Worker return rhs < lhs; 50*6777b538SAndroid Build Coastguard Worker } 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker friend bool operator<=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) { 53*6777b538SAndroid Build Coastguard Worker return !(rhs < lhs); 54*6777b538SAndroid Build Coastguard Worker } 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker friend bool operator>=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) { 57*6777b538SAndroid Build Coastguard Worker return !(lhs < rhs); 58*6777b538SAndroid Build Coastguard Worker } 59*6777b538SAndroid Build Coastguard Worker data()60*6777b538SAndroid Build Coastguard Worker int data() const { return data_; } 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker private: 63*6777b538SAndroid Build Coastguard Worker volatile int data_; 64*6777b538SAndroid Build Coastguard Worker }; 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker } // namespace base 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker #endif // BASE_TEST_MOVE_ONLY_INT_H_ 69