This header defines support for implementing classes that have some trailing object (or arrays of objects) appended to them.
More...
|
class | llvm::trailing_objects_internal::AlignmentCalcHelper< First, Rest > |
| Helper template to calculate the max alignment requirement for a set of objects. More...
|
|
class | llvm::trailing_objects_internal::AlignmentCalcHelper< First > |
|
class | llvm::trailing_objects_internal::TrailingObjectsBase |
| The base class for TrailingObjects* classes. More...
|
|
struct | llvm::trailing_objects_internal::TrailingObjectsBase::OverloadToken< T > |
| OverloadToken's purpose is to allow specifying function overloads for different types, without actually taking the types as parameters. More...
|
|
class | llvm::trailing_objects_internal::TrailingObjectsAligner< Align > |
| This helper template works-around MSVC 2013's lack of useful alignas() support. More...
|
|
class | llvm::trailing_objects_internal::TrailingObjectsAligner< 1 > |
|
class | llvm::trailing_objects_internal::TrailingObjectsAligner< 2 > |
|
class | llvm::trailing_objects_internal::TrailingObjectsAligner< 4 > |
|
class | llvm::trailing_objects_internal::TrailingObjectsAligner< 8 > |
|
class | llvm::trailing_objects_internal::TrailingObjectsAligner< 16 > |
|
class | llvm::trailing_objects_internal::TrailingObjectsAligner< 32 > |
|
struct | llvm::trailing_objects_internal::ExtractSecondType< Ty1, Ty2 > |
|
class | llvm::trailing_objects_internal::TrailingObjectsImpl< Align, BaseTy, TopTrailingObj, PrevTy, MoreTys > |
|
class | llvm::trailing_objects_internal::TrailingObjectsImpl< Align, BaseTy, TopTrailingObj, PrevTy, NextTy, MoreTys... > |
|
class | llvm::trailing_objects_internal::TrailingObjectsImpl< Align, BaseTy, TopTrailingObj, PrevTy > |
|
class | llvm::TrailingObjects< BaseTy, TrailingTys > |
| See the file comment for details on the usage of the TrailingObjects type. More...
|
|
struct | llvm::TrailingObjects< BaseTy, TrailingTys >::FixedSizeStorage< Tys > |
| A type where its ::with_counts template member has a ::type member suitable for use as uninitialized storage for an object with the given trailing object counts. More...
|
|
struct | llvm::TrailingObjects< BaseTy, TrailingTys >::FixedSizeStorage< Tys >::with_counts< Counts > |
|
class | llvm::TrailingObjects< BaseTy, TrailingTys >::FixedSizeStorageOwner |
| A type that acts as the owner for an object placed into fixed storage. More...
|
|
This header defines support for implementing classes that have some trailing object (or arrays of objects) appended to them.
The main purpose is to make it obvious where this idiom is being used, and to make the usage more idiomatic and more difficult to get wrong.
The TrailingObject template abstracts away the reinterpret_cast, pointer arithmetic, and size calculations used for the allocation and access of appended arrays of objects, and takes care that they are all allocated at their required alignment. Additionally, it ensures that the base type is final – deriving from a class that expects data appended immediately after it is typically not safe.
Users are expected to derive from this template, and provide numTrailingObjects implementations for each trailing type except the last, e.g. like this sample:
class VarLengthObj : private TrailingObjects<VarLengthObj, int, double> {
friend TrailingObjects;
unsigned NumInts, NumDoubles;
size_t numTrailingObjects(OverloadToken<int>) const { return NumInts; }
};
You can access the appended arrays via 'getTrailingObjects', and determine the size needed for allocation via 'additionalSizeToAlloc' and 'totalSizeToAlloc'.
All the methods implemented by this class are are intended for use by the implementation of the class, not as part of its interface (thus, private inheritance is suggested).
Definition in file TrailingObjects.h.