1 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 2 // -*- mode: C++ -*- 3 // 4 // Copyright (C) 2013-2020 Red Hat, Inc. 5 6 /// @file 7 /// 8 /// Utilities to ease the wrapping of C types into std::shared_ptr 9 10 #ifndef __ABG_SPTR_UTILS_H__ 11 #define __ABG_SPTR_UTILS_H__ 12 13 #include <regex.h> 14 #include <memory> 15 16 17 namespace abigail 18 { 19 20 /// Namespace for the utilities to wrap C types into std::shared_ptr. 21 namespace sptr_utils 22 { 23 24 using std::shared_ptr; 25 26 /// This is to be specialized for the diverse C types that needs 27 /// wrapping in shared_ptr. 28 /// 29 /// @tparam T the type of the C type to wrap in a shared_ptr. 30 /// 31 /// @param p a pointer to wrap in a shared_ptr. 32 /// 33 /// @return then newly created shared_ptr<T> 34 template<class T> 35 shared_ptr<T> 36 build_sptr(T* p); 37 38 /// This is to be specialized for the diverse C types that needs 39 /// wrapping in shared_ptr. 40 /// 41 /// This variant creates a pointer to T and wraps it into a 42 /// shared_ptr<T>. 43 /// 44 /// @tparam T the type of the C type to wrap in a shared_ptr. 45 /// 46 /// @return then newly created shared_ptr<T> 47 template<class T> 48 shared_ptr<T> 49 build_sptr(); 50 51 /// A deleter for shared pointers that ... doesn't delete the object 52 /// managed by the shared pointer. 53 struct noop_deleter 54 { 55 template<typename T> 56 void operatornoop_deleter57 operator()(const T*) 58 {} 59 }; 60 61 }// end namespace sptr_utils 62 }// end namespace abigail 63 64 #endif //__ABG_SPTR_UTILS_H__ 65