LLVM  10.0.0svn
FDRLogBuilder.h
Go to the documentation of this file.
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_
10 
11 #include "llvm/XRay/FDRRecords.h"
12 
13 namespace llvm {
14 namespace xray {
15 
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;
27 
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;
32  }
33 
34  std::vector<std::unique_ptr<Record>> consume() { return std::move(Records); }
35 };
36 
37 } // namespace xray
38 } // namespace llvm
39 
40 #endif // LLVM_INCLUDE_LLVM_XRAY_FDRLOGBUILDER_H_
This class represents lattice values for constants.
Definition: AllocatorList.h:23
std::vector< std::unique_ptr< Record > > consume()
Definition: FDRLogBuilder.h:34
LogBuilder & add(T &&... A)
Definition: FDRLogBuilder.h:29
The LogBuilder class allows for creating ad-hoc collections of records through the add<...
Definition: FDRLogBuilder.h:25