Arcane  4.1.12.0
User documentation
Loading...
Searching...
No Matches
TraceAccessor2.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* TraceAccessor2.h (C) 2000-2020 */
9/* */
10/* Traces. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_TRACEACCESSOR2_H
13#define ARCANE_UTILS_TRACEACCESSOR2_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/String.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane::internal
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29/*!
30 * \brief API UNDER DEVELOPMENT. DO NOT USE.
31 */
32class ARCANE_UTILS_EXPORT TraceAccessor2
33: public TraceAccessor
34{
35 public:
36
37 explicit TraceAccessor2(ITraceMng* tm)
38 : TraceAccessor(tm)
39 {}
40
41 public:
42
43 bool isActive() const { return m_is_active; }
44
45 private:
46
47 bool m_is_active = false;
48};
49
50template <typename T>
51class TracePrinter
52{
53 public:
54
55 TracePrinter(const char* name, const T& r)
56 : m_name(name)
57 , m_r(r)
58 {}
59 friend std::ostream& operator<<(std::ostream& o, const TracePrinter<T>& x)
60 {
61 o << " " << x.m_name << "=" << x.m_r;
62 return o;
63 }
64
65 public:
66
67 const char* m_name;
68 const T& m_r;
69};
70
71template <typename T>
72inline TracePrinter<T> makeTracePrinter(const char* name, const T& field_name)
73{
74 return TracePrinter<T>(name, field_name);
75}
76
77template <typename... Args> String
78format2(const String& str, const Args&... args)
79{
80 return String::format(str, args...);
81}
82
83/*---------------------------------------------------------------------------*/
84/*---------------------------------------------------------------------------*/
85
86inline bool
87isTraceActive(const TraceAccessor2* tr)
88{
89 return tr->isActive();
90}
91
92#define A_TR(field_name) Arcane::internal::makeTracePrinter(#field_name, field_name)
93
94#define A_TR2(name, field_name) Arcane::internal::makeTracePrinter(name, field_name)
95
96#define A_INFO(...) \
97 do { \
98 if (Arcane::internal::isTraceActive(this)) { \
99 info() << Arcane::String::format(__VA_ARGS__); \
100 } \
101 } while (false)
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
105
106} // namespace Arcane::internal
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
110
111#endif
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.