1 //===- FDRLogBuilder.h - XRay FDR Log Building Utility --------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
8 #ifndef LLVM_INCLUDE_LLVM_XRAY_FDRLOGBUILDER_H_
9 #define LLVM_INCLUDE_LLVM_XRAY_FDRLOGBUILDER_H_
11 #include "llvm/XRay/FDRRecords.h"
16 /// The LogBuilder class allows for creating ad-hoc collections of records
17 /// through the `add<...>(...)` function. An example use of this API is in
18 /// crafting arbitrary sequences of records:
20 /// auto Records = LogBuilder()
21 /// .add<BufferExtents>(256)
22 /// .add<NewBufferRecord>(1)
26 std::vector
<std::unique_ptr
<Record
>> Records
;
29 template <class R
, class... T
> LogBuilder
&add(T
&&... A
) {
30 Records
.emplace_back(new R(std::forward
<T
>(A
)...));
34 std::vector
<std::unique_ptr
<Record
>> consume() { return std::move(Records
); }
40 #endif // LLVM_INCLUDE_LLVM_XRAY_FDRLOGBUILDER_H_