CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / cmMakefileProfilingData.h
blob4cf0bfa77cce64a1c16a9d9233b67569b7fcdeda
1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #pragma once
4 #include <memory>
5 #include <string>
7 #include <cm/optional>
9 #include <cm3p/json/value.h> // IWYU pragma: keep
11 #include "cmsys/FStream.hxx"
13 namespace Json {
14 class StreamWriter;
17 class cmMakefileProfilingData
19 public:
20 cmMakefileProfilingData(const std::string&);
21 ~cmMakefileProfilingData() noexcept;
22 void StartEntry(const std::string& category, const std::string& name,
23 cm::optional<Json::Value> args = cm::nullopt);
24 void StopEntry();
26 class RAII
28 public:
29 RAII() = delete;
30 RAII(const RAII&) = delete;
31 RAII(RAII&&) noexcept;
33 RAII(cmMakefileProfilingData& data, const std::string& category,
34 const std::string& name,
35 cm::optional<Json::Value> args = cm::nullopt);
37 ~RAII();
39 RAII& operator=(const RAII&) = delete;
40 RAII& operator=(RAII&&) noexcept;
42 private:
43 cmMakefileProfilingData* Data = nullptr;
46 private:
47 cmsys::ofstream ProfileStream;
48 std::unique_ptr<Json::StreamWriter> JsonWriter;