//===- AllocatorBase.h - Simple memory allocation abstraction ---*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// \file /// /// This file defines MallocAllocator. MallocAllocator conforms to the LLVM /// "Allocator" concept which consists of an Allocate method accepting a size /// and alignment, and a Deallocate accepting a pointer and size. Further, the /// LLVM "Allocator" concept has overloads of Allocate and Deallocate for /// setting size and alignment based on the final type. These overloads are /// typically provided by a base class template \c AllocatorBase. /// //===----------------------------------------------------------------------===// #ifndef LLVM_SUPPORT_ALLOCATORBASE_H #define LLVM_SUPPORT_ALLOCATORBASE_H #ifdef _MSC_VER #define LLVM_ALLOCATORHOLDER_EMPTYBASE … #else #define LLVM_ALLOCATORHOLDER_EMPTYBASE #endif // _MSC_VER #include "llvm/Support/Compiler.h" #include "llvm/Support/MemAlloc.h" #include <type_traits> namespace llvm { /// CRTP base class providing obvious overloads for the core \c /// Allocate() methods of LLVM-style allocators. /// /// This base class both documents the full public interface exposed by all /// LLVM-style allocators, and redirects all of the overloads to a single core /// set of methods which the derived class must define. template <typename DerivedT> class AllocatorBase { … }; class MallocAllocator : public AllocatorBase<MallocAllocator> { … }; namespace detail { template <typename Alloc> class AllocatorHolder : Alloc { … }; AllocatorHolder<Alloc &>; } // namespace detail } // namespace llvm #endif // LLVM_SUPPORT_ALLOCATORBASE_H