Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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_XRAY_FDRLOGBUILDER_H
9
#define 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_XRAY_FDRLOGBUILDER_H