Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
TraceMessage.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* TraceMessage.cc (C) 2000-2018 */
9/* */
10/* Gestion des messages. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arccore/trace/ITraceMng.h"
15#include "arccore/base/String.h"
16
17#include <iostream>
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arccore
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28TraceMessage::
29TraceMessage(std::ostream* ostr,ITraceMng* m,Trace::eMessageType id,int level)
30: m_stream(ostr)
31, m_parent(m)
32, m_type(id)
33, m_level(level)
34, m_color(0)
35{
36 if (m_parent)
37 m_parent->beginTrace(this);
38}
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
42
43TraceMessage::
44TraceMessage(const TraceMessage& from)
45: m_stream(from.m_stream)
46, m_parent(from.m_parent)
47, m_type(from.m_type)
48, m_level(from.m_level)
49, m_color(from.m_color)
50{
51 if (m_parent)
52 m_parent->beginTrace(this);
53}
54
55/*---------------------------------------------------------------------------*/
56/*---------------------------------------------------------------------------*/
57
58const TraceMessage& TraceMessage::
59operator=(const TraceMessage& from)
60{
61 ITraceMng* from_parent = from.parent();
62 if (from_parent)
63 from_parent->beginTrace(&from);
64 if (m_parent)
65 m_parent->endTrace(this);
66 m_stream = from.m_stream;
67 m_parent = from_parent;
68 m_type = from.m_type;
69 m_level = from.m_level;
70 m_color = from.m_color;
71 return *this;
72}
73
74/*---------------------------------------------------------------------------*/
75/*---------------------------------------------------------------------------*/
76// NOTE: ce destructeur peut envoyer une exception si le message est
77// de type Fatal ou ParallelFatal. Avec le C++11, il faut le signaler
78// explicitement sinon le code se termine via un appel à std::terminate().
79// A noter qu'avec gcc 4.7 et avant, même avec l'option std=c++11 il n'est
80// pas nécessaire de spécifier le noexcept.
81TraceMessage::
82~TraceMessage() ARCCORE_NOEXCEPT_FALSE
83{
84 if (m_parent)
85 m_parent->endTrace(this);
86}
87
88/*---------------------------------------------------------------------------*/
89/*---------------------------------------------------------------------------*/
90
91const TraceMessage& TraceMessage::
92width(Integer v) const
93{
94 m_stream->width(v);
95 return *this;
96}
97
98/*---------------------------------------------------------------------------*/
99/*---------------------------------------------------------------------------*/
100
101std::ostream& TraceMessage::
102file() const
103{
104 return *m_stream;
105}
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
109
110/*---------------------------------------------------------------------------*/
111/*---------------------------------------------------------------------------*/
112//static int zeroi = 0;
113std::ostream& Trace::
114operator<< (std::ostream& o,const Trace::Width& w)
115{
116 o.width(w.m_width);
117 //if (zeroi==1)
118 //o.flags(ios::left|ios::scientific);
119 //++zeroi;
120 return o;
121}
122
123std::ostream& Trace::
124operator<< (std::ostream& o,const Trace::Precision& w)
125{
126 bool is_scientific = w.m_scientific;
127 std::ios::fmtflags old_flags = o.flags();
128 if (is_scientific){
129 o.flags(std::ios::scientific);
130 }
131 std::streamsize p = o.precision(w.m_precision);
132 o << w.m_value;
133 o.precision(p);
134 if (is_scientific)
135 o.flags(old_flags);
136 return o;
137}
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142const TraceMessage&
143operator<<(const TraceMessage& o,const Trace::Color& c)
144{
145 o.m_color = c.m_color;
146 return o;
147}
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155Trace::Setter::
156Setter(ITraceMng* msg,const String& name)
157: m_msg(msg)
158{
159 m_msg->pushTraceClass(name);
160}
161
162/*---------------------------------------------------------------------------*/
163/*---------------------------------------------------------------------------*/
164
166~Setter()
167{
168 m_msg->popTraceClass();
169 m_msg->flush();
170}
171
172/*---------------------------------------------------------------------------*/
173/*---------------------------------------------------------------------------*/
174
175} // End namespace Arccore
176
177/*---------------------------------------------------------------------------*/
178/*---------------------------------------------------------------------------*/
179
Interface du gestionnaire de traces.
virtual void pushTraceClass(const String &name)=0
Ajoute la classe s à la pile des classes de messages actifs. \threadsafe.
Chaîne de caractères unicode.
Positionne une couleur pour le message.
Formattage des réels avec une précision donnée.
Integer m_precision
Nombre de chiffres significatifs.
~Setter()
Libère l'instance et remet l'ancienne classe de message dans m_msg.
Formattage du flot en longueur.
Integer m_width
Longueur du formattage.
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.
eMessageType
Flot sur lequel on envoie les messages.
Espace de nom de Arccore.
Definition ArcaneTypes.h:24