//==--- ImmutableList.h - Immutable (functional) list interface --*- 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 the ImmutableList class. /// //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_IMMUTABLELIST_H #define LLVM_ADT_IMMUTABLELIST_H #include "llvm/ADT/FoldingSet.h" #include "llvm/Support/Allocator.h" #include <cassert> #include <cstdint> #include <new> namespace llvm { template <typename T> class ImmutableListFactory; template <typename T> class ImmutableListImpl : public FoldingSetNode { … }; /// ImmutableList - This class represents an immutable (functional) list. /// It is implemented as a smart pointer (wraps ImmutableListImpl), so it /// it is intended to always be copied by value as if it were a pointer. /// This interface matches ImmutableSet and ImmutableMap. ImmutableList /// objects should almost never be created directly, and instead should /// be created by ImmutableListFactory objects that manage the lifetime /// of a group of lists. When the factory object is reclaimed, all lists /// created by that factory are released as well. template <typename T> class ImmutableList { … }; template <typename T> class ImmutableListFactory { … }; //===----------------------------------------------------------------------===// // Partially-specialized Traits. //===----------------------------------------------------------------------===// DenseMapInfo<ImmutableList<T>, void>; } // end namespace llvm #endif // LLVM_ADT_IMMUTABLELIST_H