L4Re Operating System Framework
Interface and Usage Documentation
Loading...
Searching...
No Matches
shared_cap
Go to the documentation of this file.
1// vim:set ft=cpp: -*- Mode: C++ -*-
6/*
7 * (c) 2017 Alexander Warg <alexander.warg@kernkonzept.com>
8 *
9 * License: see LICENSE.spdx (in this directory or the directories above)
10 */
11
12#pragma once
13
14#include <l4/re/util/cap_alloc>
16#include <l4/sys/cxx/types>
17
18namespace L4Re { namespace Util {
19
48template< typename T >
50 = L4::Detail::Shared_cap_impl<T, L4Re::Util::Smart_count_cap<L4_FP_ALL_SPACES>>;
52template< typename T >
53using shared_cap [[deprecated("Use L4Re::Util::Shared_cap.")]]
54 = L4::Detail::Shared_cap_impl<T, L4Re::Util::Smart_count_cap<L4_FP_ALL_SPACES>>;
55
61template< typename T >
64{ return Shared_cap<T>(cap_alloc.alloc<T>()); }
65
78template<typename T, typename U>
80{
81 auto to = L4::cap_cast<T>(from.get());
82 return Shared_cap<T>(from, to);
83}
84
97template<typename T, typename U>
99{
100 auto to = L4::cap_cast<T>(from.get());
101 return Shared_cap<T>(L4::Types::move(from), to);
102}
103
114template<typename T, typename U>
116{
117 auto to = L4::cap_reinterpret_cast<T>(from.get());
118 return Shared_cap<T>(from, to);
119}
120
133template<typename T, typename U>
135{
136 auto to = L4::cap_reinterpret_cast<T>(from.get());
137 return Shared_cap<T>(L4::Types::move(from), to);
138}
139
150template<typename T, typename U>
152{
153 if (auto to = L4::cap_dynamic_cast<T>(from.get()))
154 return Shared_cap<T>(from, to);
155 else
156 return Shared_cap<T>();
157}
158
171template<typename T, typename U>
173{
174 if (auto to = L4::cap_dynamic_cast<T>(from.get()))
175 return Shared_cap<T>(L4::Types::move(from), to);
176 else
177 return Shared_cap<T>();
178}
179
214template< typename T >
215using Shared_del_cap
216 = L4::Detail::Shared_cap_impl<T, L4Re::Util::Smart_count_cap<L4_FP_DELETE_OBJ>>;
218template< typename T >
219using shared_del_cap [[deprecated("Use L4Re::Util::Shared_del_cap.")]]
220 = L4::Detail::Shared_cap_impl<T, L4Re::Util::Smart_count_cap<L4_FP_DELETE_OBJ>>;
221
227template< typename T >
230{ return Shared_del_cap<T>(cap_alloc.alloc<T>()); }
231
243 */
244template<typename T, typename U>
246{
247 auto to = L4::cap_cast<T>(from.get());
248 return Shared_del_cap<T>(from, to);
249}
250
262 */
263template<typename T, typename U>
265{
266 auto to = L4::cap_cast<T>(from.get());
267 return Shared_del_cap<T>(L4::Types::move(from), to);
268}
269
280template<typename T, typename U>
283{
284 auto to = L4::cap_reinterpret_cast<T>(from.get());
285 return Shared_del_cap<T>(from, to);
286}
287
300template<typename T, typename U>
303{
304 auto to = L4::cap_reinterpret_cast<T>(from.get());
305 return Shared_del_cap<T>(L4::Types::move(from), to);
306}
307
318template<typename T, typename U>
321{
322 if (auto to = L4::cap_dynamic_cast<T>(from.get()))
323 return Shared_del_cap<T>(from, to);
324 else
325 return Shared_del_cap<T>();
326}
327
340template<typename T, typename U>
343{
344 if (auto to = L4::cap_dynamic_cast<T>(from.get()))
345 return Shared_del_cap<T>(L4::Types::move(from), to);
346 else
347 return Shared_del_cap<T>();
348}
349
350}} // namespace L4Re::Util
351
_Cap_alloc cap_alloc
Capability allocator.
Documentation of the L4 Runtime Environment utility functionality in C++.
Definition l4re.dox:21
Shared_del_cap< T > make_shared_del_cap()
Allocate a capability slot and wrap it in a Shared_del_cap.
Definition shared_cap:227
Shared_cap< T > make_shared_cap()
Allocate a capability slot and wrap it in a Shared_cap.
Definition shared_cap:62
Shared_del_cap< T > shared_del_cap_reinterpret_cast(Shared_del_cap< U > const &from) noexcept
Create a new shared capability by a reinterpret cast from another shared capability.
Definition shared_cap:280
Shared_cap< T > shared_cap_reinterpret_cast(Shared_cap< U > const &from) noexcept
Create a new shared capability by a reinterpret cast from another shared capability.
Definition shared_cap:114
Shared_del_cap< T > shared_del_cap_cast(Shared_del_cap< U > const &from) noexcept
Create a new shared capability by an explicit cast from another shared capability.
Definition shared_cap:243
L4::Detail::Shared_cap_impl< T, L4Re::Util::Smart_count_cap< L4_FP_DELETE_OBJ > > Shared_del_cap
Shared capability that implements automatic free and unmap+delete of the capability selector.
Definition shared_cap:214
L4::Detail::Shared_cap_impl< T, L4Re::Util::Smart_count_cap< L4_FP_ALL_SPACES > > Shared_cap
Shared capability that implements automatic free and unmap of the capability selector.
Definition shared_cap:49
Shared_cap< T > shared_cap_dynamic_cast(Shared_cap< U > const &from) noexcept
Create a new shared capability by a dynamic cast from another shared capability.
Definition shared_cap:150
Shared_del_cap< T > shared_del_cap_dynamic_cast(Shared_del_cap< U > const &from) noexcept
Create a new shared capability by a dynamic cast from another shared capability.
Definition shared_cap:318
Shared_cap< T > shared_cap_cast(Shared_cap< U > const &from) noexcept
Create a new shared capability by an explicit cast from another shared capability.
Definition shared_cap:78
L4Re C++ Interfaces.
Definition cmd_control:14
Cap< T > cap_reinterpret_cast(Cap< F > const &c) noexcept
reinterpret_cast for capabilities.
Definition capability.h:447
Cap< T > cap_cast(Cap< F > const &c) noexcept
static_cast for capabilities.
Definition capability.h:416
Cap< T > cap_dynamic_cast(Cap< F > const &c) noexcept
dynamic_cast for capabilities.
Definition capability:116
Capability allocator.