OSDN Git Service

git-svn-id: http://10.144.169.20/repos/um/branches/l7vsd-3.x-shamshel-refine@7872...
[ultramonkey-l7/ultramonkey-l7-v3.git] / include / atomic_ptr.h
1 #ifndef ATOMIC_PTR_H
2 #define ATOMIC_PTR_H
3 #include <boost/utility.hpp>
4 #include <iostream>
5 template<class T> class atomic_ptr :boost::noncopyable
6 {
7 protected:
8         T _p;
9 public:
10         T get(){
11                 return _p;
12         }
13         atomic_ptr& operator=(T _q) {
14                 __sync_lock_test_and_set(&_p,_q);
15                 return *this;
16         }
17         atomic_ptr& operator++(int){
18                 _p++;
19                 return *this;
20         }
21         atomic_ptr& operator--(int){
22                 _p--;
23                 return *this;
24         }
25         bool operator<(T _q) const{
26                 return (_p < _q);
27         }
28         bool operator<=(T _q) const{
29                 return (_p <= _q);
30         }
31         bool operator>(T _q) const{
32                 return (_p > _q);
33         }
34         bool operator>=(T _q) const{
35                 return (_p >= _q);
36         }
37         bool operator==(T _q) const{
38                 return (_p == _q);
39         }
40         bool operator!=(T _q) const{
41                 return (_p != _q);
42         }
43 };
44
45
46 template <>
47 class atomic_ptr<int>
48 {
49 protected:
50         int _p;
51 public:
52         int get(){
53                 return _p;
54         }
55         atomic_ptr& operator=(const int _q) {
56                 __sync_lock_test_and_set(&_p,_q);
57                 return *this;
58         }
59         int operator++(int){
60                 __sync_add_and_fetch(&_p,1);
61                 return _p;
62         }
63         int operator--(int){
64                 __sync_sub_and_fetch(&_p,1);
65                 return _p;
66         }
67         bool operator<(const int _q) const{
68                 return (_p < _q);
69         }
70         bool operator<=(const int _q) const{
71                 return (_p <= _q);
72         }
73         bool operator>(const int _q) const{
74                 return (_p > _q);
75         }
76         bool operator>=(const int _q) const{
77                 return (_p >= _q);
78         }
79         bool operator==(const int _q) const{
80                 return (_p == _q);
81         }
82         bool operator!=(const int _q) const{
83                 return (_p != _q);
84         }
85
86 };
87
88 #endif