Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  41.