xref: /aosp_15_r20/external/cronet/base/test/copy_only_int.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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