Page Speed Optimization Libraries  1.13.35.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
manually_ref_counted.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http:///www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
18 
19 #ifndef PAGESPEED_KERNEL_BASE_MANUALLY_REF_COUNTED_H_
20 #define PAGESPEED_KERNEL_BASE_MANUALLY_REF_COUNTED_H_
21 
22 #include "base/logging.h"
25 
26 namespace net_instaweb {
27 
32  public:
33  ManuallyRefCounted() : n_active(1) {}
34 
38  void IncrementRefs() {
39  n_active.NoBarrierIncrement(1);
40  }
41 
52  void DecrementRefs() {
53  int n_others_active = n_active.BarrierIncrement(-1);
54  if (n_others_active == 0) {
55  delete this;
56  }
57  }
58 
59  protected:
63  virtual ~ManuallyRefCounted() {
64  DCHECK_EQ(0, n_active.value());
65  }
66 
67  private:
68  AtomicInt32 n_active;
69 
70 
71 };
72 
73 }
74 
75 #endif
76 
int32 BarrierIncrement(int32 amount)
Definition: atomic_int32.h:101
Definition: atomic_int32.h:72
void DecrementRefs()
Definition: manually_ref_counted.h:52
Definition: manually_ref_counted.h:31
int32 NoBarrierIncrement(int32 amount)
Definition: atomic_int32.h:95
void IncrementRefs()
Definition: manually_ref_counted.h:38
int32 value() const
Return the value currently stored. Has acquire semantics (see above).
Definition: atomic_int32.h:83
virtual ~ManuallyRefCounted()
Definition: manually_ref_counted.h:63