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_COPY_ONLY_INT_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_COPY_ONLY_INT_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker namespace base { 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker // A copy-only (not moveable) class that holds an integer. This is designed for 12*6777b538SAndroid Build Coastguard Worker // testing containers. See also MoveOnlyInt. 13*6777b538SAndroid Build Coastguard Worker class CopyOnlyInt { 14*6777b538SAndroid Build Coastguard Worker public: data_(data)15*6777b538SAndroid Build Coastguard Worker explicit CopyOnlyInt(int data = 1) : data_(data) {} CopyOnlyInt(const CopyOnlyInt & other)16*6777b538SAndroid Build Coastguard Worker CopyOnlyInt(const CopyOnlyInt& other) : data_(other.data_) { ++num_copies_; } ~CopyOnlyInt()17*6777b538SAndroid Build Coastguard Worker ~CopyOnlyInt() { data_ = 0; } 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker friend bool operator==(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) { 20*6777b538SAndroid Build Coastguard Worker return lhs.data_ == rhs.data_; 21*6777b538SAndroid Build Coastguard Worker } 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker friend bool operator!=(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) { 24*6777b538SAndroid Build Coastguard Worker return !operator==(lhs, rhs); 25*6777b538SAndroid Build Coastguard Worker } 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker friend bool operator<(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) { 28*6777b538SAndroid Build Coastguard Worker return lhs.data_ < rhs.data_; 29*6777b538SAndroid Build Coastguard Worker } 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker friend bool operator>(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) { 32*6777b538SAndroid Build Coastguard Worker return rhs < lhs; 33*6777b538SAndroid Build Coastguard Worker } 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker friend bool operator<=(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) { 36*6777b538SAndroid Build Coastguard Worker return !(rhs < lhs); 37*6777b538SAndroid Build Coastguard Worker } 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker friend bool operator>=(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) { 40*6777b538SAndroid Build Coastguard Worker return !(lhs < rhs); 41*6777b538SAndroid Build Coastguard Worker } 42*6777b538SAndroid Build Coastguard Worker data()43*6777b538SAndroid Build Coastguard Worker int data() const { return data_; } 44*6777b538SAndroid Build Coastguard Worker reset_num_copies()45*6777b538SAndroid Build Coastguard Worker static void reset_num_copies() { num_copies_ = 0; } 46*6777b538SAndroid Build Coastguard Worker num_copies()47*6777b538SAndroid Build Coastguard Worker static int num_copies() { return num_copies_; } 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker private: 50*6777b538SAndroid Build Coastguard Worker volatile int data_; 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker static int num_copies_; 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker CopyOnlyInt(CopyOnlyInt&&) = delete; 55*6777b538SAndroid Build Coastguard Worker CopyOnlyInt& operator=(CopyOnlyInt&) = delete; 56*6777b538SAndroid Build Coastguard Worker }; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker } // namespace base 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker #endif // BASE_TEST_COPY_ONLY_INT_H_ 61