blob: aecebb2e29ddd82be47bc4684e8b4607a78cb033 [file] [log] [blame]
Janis Danisevskisf38a0022017-04-26 14:44:46 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Shawn Willden32873522020-12-14 22:29:46 -070017#pragma once
Janis Danisevskisf38a0022017-04-26 14:44:46 -070018
Shawn Willden32873522020-12-14 22:29:46 -070019#include <stddef.h> // for size_t
Janis Danisevskisf38a0022017-04-26 14:44:46 -070020
Shawn Willdenc0f1efe2021-04-08 09:13:57 -060021#include <memory>
22
Janis Danisevskisf38a0022017-04-26 14:44:46 -070023namespace keymaster {
24
25// Default deleter for pointer types.
Shawn Willden32873522020-12-14 22:29:46 -070026template <typename T> struct DefaultDelete {
Janis Danisevskisf38a0022017-04-26 14:44:46 -070027 enum { type_must_be_complete = sizeof(T) };
28 DefaultDelete() {}
Shawn Willden32873522020-12-14 22:29:46 -070029 void operator()(T* p) const { delete p; }
Janis Danisevskisf38a0022017-04-26 14:44:46 -070030};
31
32// Default deleter for array types.
Shawn Willden32873522020-12-14 22:29:46 -070033template <typename T> struct DefaultDelete<T[]> {
Janis Danisevskisf38a0022017-04-26 14:44:46 -070034 enum { type_must_be_complete = sizeof(T) };
Shawn Willden32873522020-12-14 22:29:46 -070035 void operator()(T* p) const { delete[] p; }
Janis Danisevskisf38a0022017-04-26 14:44:46 -070036};
37
Shawn Willdenc0f1efe2021-04-08 09:13:57 -060038template <class T, class Deleter = std::default_delete<T>>
39using UniquePtr = std::unique_ptr<T, Deleter>;
Janis Danisevskisf38a0022017-04-26 14:44:46 -070040
Shawn Willden32873522020-12-14 22:29:46 -070041} // namespace keymaster