Phosphor
memory.h
1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  * Copyright 2016 Couchbase, Inc
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #pragma once
19 
20 #include <cstdio>
21 #include <memory>
22 
23 namespace phosphor {
24 
25  namespace utils {
29  template <typename T, typename... Args>
30  std::unique_ptr<T> make_unique(Args&&... args) {
31  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
32  }
33 
38  struct FILEDeleter {
39  void operator()(FILE* ptr) const {
40  std::fclose(ptr);
41  }
42  };
43 
47  using unique_FILE = std::unique_ptr<FILE, FILEDeleter>;
48 
53  unique_FILE make_unique_FILE(const char* filename, const char* flags);
54  }
55 }
Definition: memory.h:38
Definition: category_registry.h:32