ardour
comparable_shared_ptr.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 Paul Davis
3  Author: Sakari Bergen
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 
19 */
20 
21 #ifndef __ardour_comparable_shared_ptr_h__
22 #define __ardour_comparable_shared_ptr_h__
23 
25 
26 namespace ARDOUR {
27 
28 template<typename T>
29 class /*LIBARDOUR_API*/ ComparableSharedPtr : public boost::shared_ptr<T>
30  , public boost::less_than_comparable<ComparableSharedPtr<T> >
31 {
32  public:
34  template<class Y>
35  explicit ComparableSharedPtr (Y * p) : boost::shared_ptr<T> (p) {}
36 
37  template<class Y, class D>
38  ComparableSharedPtr (Y * p, D d) : boost::shared_ptr<T> (p, d) {}
39 
40  template<class Y, class D, class A>
41  ComparableSharedPtr (Y * p, D d, A a) : boost::shared_ptr<T> (p, d, a) {}
42 
44 
45  template<class Y>
47 
48  template<class Y>
49  ComparableSharedPtr(ComparableSharedPtr<Y> const & r, T * p) : boost::shared_ptr<T> (r, p) {}
50 
51  template<class Y>
52  bool operator< (ComparableSharedPtr<Y> const & other) const { return **this < *other; }
53 };
54 
55 
56 } // namespace ARDOUR
57 
58 #endif // __ardour_comparable_shared_ptr_h__
ComparableSharedPtr(ComparableSharedPtr< Y > const &r, T *p)
Definition: amp.h:29
ComparableSharedPtr(ComparableSharedPtr const &r)
ComparableSharedPtr(ComparableSharedPtr< Y > const &r)