source: mainline/uspace/lib/cpp/include/internal/memory/owner_less.hpp@ 6a3a64f

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 6a3a64f was 6a3a64f, checked in by Dzejrou <dzejrou@…>, 7 years ago

cpp: added owner_less

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 * Copyright (c) 2018 Jaroslav Jindrak
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef LIBCPP_INTERNAL_MEMORY_OWNER_LESS
30#define LIBCPP_INTERNAL_MEMORY_OWNER_LESS
31
32#include <internal/memory/shared_ptr.hpp>
33#include <internal/memory/weak_ptr.hpp>
34
35namespace std
36{
37 /**
38 * 20.8.2.4, class template owner_less:
39 */
40
41 template<class>
42 struct owner_less;
43
44 template<class T>
45 struct owner_less<shared_ptr<T>>
46 {
47 using retult_type = bool;
48 using first_argument_type = shared_ptr<T>;
49 using second_argument_type = shared_ptr<T>;
50
51 bool operator()(const shared_ptr<T>& lhs, const shared_ptr<T>& rhs) const
52 {
53 return lhs.owner_before(rhs);
54 }
55
56 bool operator()(const shared_ptr<T>& lhs, const weak_ptr<T>& rhs) const
57 {
58 return lhs.owner_before(rhs);
59 }
60
61 bool operator()(const weak_ptr<T>& lhs, const shared_ptr<T>& rhs) const
62 {
63 return lhs.owner_before(rhs);
64 }
65 };
66
67 template<class T>
68 struct owner_less<weak_ptr<T>>
69 {
70 using retult_type = bool;
71 using first_argument_type = weak_ptr<T>;
72 using second_argument_type = weak_ptr<T>;
73
74 bool operator()(const weak_ptr<T>& lhs, const weak_ptr<T>& rhs) const
75 {
76 return lhs.owner_before(rhs);
77 }
78
79 bool operator()(const shared_ptr<T>& lhs, const weak_ptr<T>& rhs) const
80 {
81 return lhs.owner_before(rhs);
82 }
83
84 bool operator()(const weak_ptr<T>& lhs, const shared_ptr<T>& rhs) const
85 {
86 return lhs.owner_before(rhs);
87 }
88 };
89}
90
91#endif
Note: See TracBrowser for help on using the repository browser.