activemq-cpp-3.9.5
AtomicRefCounter.h
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef _DECAF_UTIL_CONCURRENT_ATOMIC_ATOMICREFCOUNTER_H_
19#define _DECAF_UTIL_CONCURRENT_ATOMIC_ATOMICREFCOUNTER_H_
20
22#include <algorithm>
23
24namespace decaf{
25namespace util{
26namespace concurrent{
27namespace atomic{
28
30 private:
31
33
34 private:
35
36 AtomicRefCounter& operator= ( const AtomicRefCounter& );
37
38 public:
39
41 counter( new decaf::util::concurrent::atomic::AtomicInteger( 1 ) ) {}
42 AtomicRefCounter( const AtomicRefCounter& other ) : counter( other.counter ) {
43 this->counter->incrementAndGet();
44 }
45
46 virtual ~AtomicRefCounter() {}
47
48 protected:
49
57 void swap( AtomicRefCounter& other ) {
58 std::swap( this->counter, other.counter );
59 }
60
68 bool release() {
69 if( this->counter->decrementAndGet() == 0 ) {
70 delete this->counter;
71 return true;
72 }
73 return false;
74 }
75 };
76
77}}}}
78
79#endif /* _DECAF_UTIL_CONCURRENT_ATOMIC_ATOMICREFCOUNTER_H_ */
An int value that may be updated atomically.
Definition AtomicInteger.h:37
int incrementAndGet()
Atomically increments by one the current value.
int decrementAndGet()
Atomically decrements by one the current value.
virtual ~AtomicRefCounter()
Definition AtomicRefCounter.h:46
bool release()
Removes a reference to the counter Atomically and returns if the counter has reached zero,...
Definition AtomicRefCounter.h:68
void swap(AtomicRefCounter &other)
Swaps this instance's reference counter with the one given, this allows for copy-and-swap semantics o...
Definition AtomicRefCounter.h:57
AtomicRefCounter()
Definition AtomicRefCounter.h:40
AtomicRefCounter(const AtomicRefCounter &other)
Definition AtomicRefCounter.h:42
Definition AtomicBoolean.h:27
Definition AbstractExecutorService.h:28
Definition AbstractCollection.h:33
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.
Definition AprPool.h:25