[InstCombine] Signed saturation patterns
[llvm-complete.git] / include / llvm / XRay / FDRLogBuilder.h
blob3f49dc6dcb9d606800ddc96f84601b44f81c3b16
1 //===- FDRLogBuilder.h - XRay FDR Log Building Utility --------------------===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 #ifndef LLVM_INCLUDE_LLVM_XRAY_FDRLOGBUILDER_H_
9 #define LLVM_INCLUDE_LLVM_XRAY_FDRLOGBUILDER_H_
11 #include "llvm/XRay/FDRRecords.h"
13 namespace llvm {
14 namespace xray {
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:
19 ///
20 /// auto Records = LogBuilder()
21 /// .add<BufferExtents>(256)
22 /// .add<NewBufferRecord>(1)
23 /// .consume();
24 ///
25 class LogBuilder {
26 std::vector<std::unique_ptr<Record>> Records;
28 public:
29 template <class R, class... T> LogBuilder &add(T &&... A) {
30 Records.emplace_back(new R(std::forward<T>(A)...));
31 return *this;
34 std::vector<std::unique_ptr<Record>> consume() { return std::move(Records); }
37 } // namespace xray
38 } // namespace llvm
40 #endif // LLVM_INCLUDE_LLVM_XRAY_FDRLOGBUILDER_H_