Pigweed
 
Loading...
Searching...
No Matches
lease.h
1// Copyright 2025 The Pigweed Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4// use this file except in compliance with the License. You may obtain a copy of
5// the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12// License for the specific language governing permissions and limitations under
13// the License.
14
15#pragma once
16
17#include "pw_bluetooth_sapphire/config.h"
18#include "pw_function/function.h"
19#include "pw_result/result.h"
20
24#define PW_SAPPHIRE_ACQUIRE_LEASE(lease_provider, name) \
25 lease_provider.Acquire(PW_SAPPHIRE_LEASE_TOKEN_EXPR(name))
26
27namespace pw::bluetooth_sapphire {
28
31class Lease final {
32 public:
33 Lease() = default;
34 Lease(pw::Function<void()> unlock_fn) : unlock_fn_(std::move(unlock_fn)) {}
35 Lease(Lease&&) = default;
36 Lease& operator=(Lease&&) = default;
37 Lease(const Lease&) = delete;
38 Lease& operator=(const Lease&) = delete;
39
40 ~Lease() {
41 if (unlock_fn_) {
42 unlock_fn_();
43 }
44 }
45
46 private:
47 pw::Function<void()> unlock_fn_ = nullptr;
48};
49
53 public:
54 virtual ~LeaseProvider() = default;
55
71 virtual Result<Lease> Acquire(PW_SAPPHIRE_LEASE_TOKEN_TYPE name) = 0;
72};
73
74} // namespace pw::bluetooth_sapphire
Definition: lease.h:31
virtual Result< Lease > Acquire(PW_SAPPHIRE_LEASE_TOKEN_TYPE name)=0
fit::function_impl< function_internal::config::kInlineCallableSize, !function_internal::config::kEnableDynamicAllocation, FunctionType, PW_FUNCTION_DEFAULT_ALLOCATOR_TYPE > Function
Definition: function.h:74