0031671: Coding Rules - eliminate warnings issued by clang 11
[occt.git] / src / MoniTool / MoniTool_CaseData.hxx
1 // Created on: 1998-04-01
2 // Created by: Christian CAILLET
3 // Copyright (c) 1998-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _MoniTool_CaseData_HeaderFile
18 #define _MoniTool_CaseData_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <Standard_Integer.hxx>
24 #include <TCollection_AsciiString.hxx>
25 #include <TColStd_SequenceOfTransient.hxx>
26 #include <TColStd_SequenceOfInteger.hxx>
27 #include <TColStd_SequenceOfAsciiString.hxx>
28 #include <Standard_Transient.hxx>
29 #include <Standard_CString.hxx>
30 #include <Standard_Boolean.hxx>
31 #include <Standard_Real.hxx>
32 #include <Standard_Type.hxx>
33 class Standard_Transient;
34 class TopoDS_Shape;
35 class gp_XYZ;
36 class gp_XY;
37 class TCollection_AsciiString;
38 class Message_Msg;
39
40
41 class MoniTool_CaseData;
42 DEFINE_STANDARD_HANDLE(MoniTool_CaseData, Standard_Transient)
43
44 //! This class is intended to record data attached to a case to be
45 //! exploited.
46 //! Cases can be :
47 //! * internal, i.e. for immediate debug
48 //! for instance, on an abnormal exception, fill a CaseData
49 //! in a DB (see class DB) then look at its content by XSDRAW
50 //! * to record abnormal situation, which cause a warning or fail
51 //! message, for instance during a transfer
52 //! This will allow, firstly to build a more comprehensive
53 //! message (with associated data), secondly to help seeing
54 //! "what happened"
55 //! * to record data in order to fix a problem
56 //! If a CASE is well defined and its fix is well known too,
57 //! recording a CaseData which identifies the CASE will allow
58 //! to furstherly call the appropriate fix routine
59 //!
60 //! A CaseData is defined by
61 //! * an optional CASE identifier
62 //! If it is defined, this will allow systematic exploitation
63 //! such as calling a fix routine
64 //! * an optional Check Status, Warning or Fail, else it is Info
65 //! * a NAME : it just allows to identify where this CaseData was
66 //! created (help to debug)
67 //! * a LIST OF DATA
68 //!
69 //! Each Data has a type (integer, real etc...) and can have a name
70 //! Hence, each data may be identified by :
71 //! * its absolute rank (from 1 to NbData)
72 //! * its name if it has one (exact matching)
73 //! * else, an interpreted identifier, which gives the type and
74 //! the rank in the type (for instance, first integer; etc)
75 //! (See NameRank)
76 class MoniTool_CaseData : public Standard_Transient
77 {
78
79 public:
80
81   
82   //! Creates a CaseData with a CaseId and a Name
83   //! (by default not defined)
84   Standard_EXPORT MoniTool_CaseData(const Standard_CString caseid = "", const Standard_CString name = "");
85   
86   //! Sets a CaseId
87   Standard_EXPORT void SetCaseId (const Standard_CString caseid);
88   
89   //! Sets a Name
90   Standard_EXPORT void SetName (const Standard_CString name);
91   
92   //! Returns the CaseId
93   Standard_EXPORT Standard_CString CaseId() const;
94   
95   //! Returns the Name
96   Standard_EXPORT Standard_CString Name() const;
97   
98   //! Tells if <me> is Check (Warning or Fail), else it is Info
99   Standard_EXPORT Standard_Boolean IsCheck() const;
100   
101   //! Tells if <me> is Warning
102   Standard_EXPORT Standard_Boolean IsWarning() const;
103   
104   //! Tells if <me> is Fail
105   Standard_EXPORT Standard_Boolean IsFail() const;
106   
107   //! Resets Check Status, i.e. sets <me> as Info
108   Standard_EXPORT void ResetCheck();
109   
110   //! Sets <me> as Warning
111   Standard_EXPORT void SetWarning();
112   
113   //! Sets <me> as Fail
114   Standard_EXPORT void SetFail();
115   
116   //! Sets the next Add... not to add but to change the data item
117   //! designated by its name.
118   //! If next Add... is not called with a name, SetChange is ignored
119   //! Reset by next Add... , whatever <num> is correct or not
120   Standard_EXPORT void SetChange();
121   
122   //! Sets the next Add... not to add but to replace the data item
123   //! <num>, if <num> is between 1 and NbData.
124   //! Reset by next Add... , whatever <num> is correct or not
125   Standard_EXPORT void SetReplace (const Standard_Integer num);
126   
127   //! Unitary adding a data; rather internal
128   Standard_EXPORT void AddData (const Handle(Standard_Transient)& val, const Standard_Integer kind, const Standard_CString name = "");
129   
130   //! Adds the currently caught exception
131   Standard_EXPORT void AddRaised (const Handle(Standard_Failure)& theException, const Standard_CString name = "");
132   
133   //! Adds a Shape (recorded as a HShape)
134   Standard_EXPORT void AddShape (const TopoDS_Shape& sh, const Standard_CString name = "");
135   
136   //! Adds a XYZ
137   Standard_EXPORT void AddXYZ (const gp_XYZ& aXYZ, const Standard_CString name = "");
138   
139   //! Adds a XY
140   Standard_EXPORT void AddXY (const gp_XY& aXY, const Standard_CString name = "");
141   
142   //! Adds a Real
143   Standard_EXPORT void AddReal (const Standard_Real val, const Standard_CString name = "");
144   
145   //! Adds two reals (for instance, two parameters)
146   Standard_EXPORT void AddReals (const Standard_Real v1, const Standard_Real v2, const Standard_CString name = "");
147   
148   //! Adds the CPU time between lastCPU and now
149   //! if <curCPU> is given, the CPU amount is  curCPU-lastCPU
150   //! else it is currently measured CPU - lastCPU
151   //! lastCPU has been read by call to GetCPU
152   //! See GetCPU to get amount, and LargeCPU to test large amount
153   Standard_EXPORT void AddCPU (const Standard_Real lastCPU, const Standard_Real curCPU = 0, const Standard_CString name = "");
154   
155   //! Returns the current amount of CPU
156   //! This allows to laterly test and record CPU amount
157   //! Its value has to be given to LargeCPU and AddCPU
158   Standard_EXPORT Standard_Real GetCPU() const;
159   
160   //! Tells if a CPU time amount is large
161   //! <maxCPU>  gives the amount over which an amount is large
162   //! <lastCPU> gives the start CPU amount
163   //! if <curCPU> is given, the tested CPU amount is curCPU-lastCPU
164   //! else it is currently measured CPU - lastCPU
165   Standard_EXPORT Standard_Boolean LargeCPU (const Standard_Real maxCPU, const Standard_Real lastCPU, const Standard_Real curCPU = 0) const;
166   
167   //! Adds a Geometric as a Transient (Curve, Surface ...)
168   Standard_EXPORT void AddGeom (const Handle(Standard_Transient)& geom, const Standard_CString name = "");
169   
170   //! Adds a Transient, as an Entity from an InterfaceModel for
171   //! instance : it will then be printed with the help of a DBPE
172   Standard_EXPORT void AddEntity (const Handle(Standard_Transient)& ent, const Standard_CString name = "");
173   
174   //! Adds a Text (as HAsciiString)
175   Standard_EXPORT void AddText (const Standard_CString text, const Standard_CString name = "");
176   
177   //! Adds an Integer
178   Standard_EXPORT void AddInteger (const Standard_Integer val, const Standard_CString name = "");
179   
180   //! Adds a Transient, with no more meaning
181   Standard_EXPORT void AddAny (const Handle(Standard_Transient)& val, const Standard_CString name = "");
182   
183   //! Removes a Data from its rank. Does nothing if out of range
184   Standard_EXPORT void RemoveData (const Standard_Integer num);
185   
186   //! Returns the count of data recorded to a set
187   Standard_EXPORT Standard_Integer NbData() const;
188   
189   //! Returns a data item (n0 <nd> in the set <num>)
190   Standard_EXPORT Handle(Standard_Transient) Data (const Standard_Integer nd) const;
191   
192   //! Returns a data item, under control of a Type
193   //! If the data item is kind of this type, it is returned in <val>
194   //! and the returned value is True
195   //! Else, <val> is unchanged and the returned value is False
196   Standard_EXPORT Standard_Boolean GetData (const Standard_Integer nd, const Handle(Standard_Type)& type, Handle(Standard_Transient)& val) const;
197   
198   //! Returns the kind of a data :
199   //! KIND TYPE      MEANING
200   //! 0  ANY       any (not one of the followings)
201   //! 1  EX        raised exception
202   //! 2  EN        entity
203   //! 3  G         geom
204   //! 4  SH        shape
205   //! 5  XYZ       XYZ
206   //! 6  XY or UV  XY
207   //! 7  RR        2 reals
208   //! 8  R         1 real
209   //! 9  CPU       CPU (1 real)
210   //! 10 T         text
211   //! 11 I         integer
212   //!
213   //! For NameNum, these codes for TYPE must be given exact
214   //! i.e. SH for a Shape, not S nor SHAPE nor SOLID etc
215   Standard_EXPORT Standard_Integer Kind (const Standard_Integer nd) const;
216   
217   //! Returns the name of a data. If it has no name, the string is
218   //! empty (length = 0)
219   Standard_EXPORT const TCollection_AsciiString& Name (const Standard_Integer nd) const;
220   
221   //! Returns the first suitable data rank for a given name
222   //! Exact maching (exact case, no completion) is required
223   //! Firstly checks the recorded names
224   //! If not found, considers the name as follows :
225   //! Name = "TYPE" : search for the first item with this TYPE
226   //! Name = "TYPE:nn" : search for the nn.th item with this TYPE
227   //! See allowed values in method Kind
228   Standard_EXPORT Standard_Integer NameNum (const Standard_CString name) const;
229   
230   //! Returns a data as a shape, Null if not a shape
231   Standard_EXPORT TopoDS_Shape Shape (const Standard_Integer nd) const;
232   
233   //! Returns a data as a XYZ (i.e. Geom_CartesianPoint)
234   //! Returns False if not the good type
235   Standard_EXPORT Standard_Boolean XYZ (const Standard_Integer nd, gp_XYZ& val) const;
236   
237   //! Returns a data as a XY  (i.e. Geom2d_CartesianPoint)
238   //! Returns False if not the good type
239   Standard_EXPORT Standard_Boolean XY (const Standard_Integer nd, gp_XY& val) const;
240   
241   //! Returns a couple of reals  (stored in Geom2d_CartesianPoint)
242   Standard_EXPORT Standard_Boolean Reals (const Standard_Integer nd, Standard_Real& v1, Standard_Real& v2) const;
243   
244   //! Returns a real or CPU amount (stored in Geom2d_CartesianPoint)
245   //! (allows an Integer converted to a Real)
246   Standard_EXPORT Standard_Boolean Real (const Standard_Integer nd, Standard_Real& val) const;
247   
248   //! Returns a text (stored in TCollection_HAsciiString)
249   Standard_EXPORT Standard_Boolean Text (const Standard_Integer nd, Standard_CString& text) const;
250   
251   //! Returns an Integer
252   Standard_EXPORT Standard_Boolean Integer (const Standard_Integer nd, Standard_Integer& val) const;
253   
254   //! Returns a Msg from a CaseData : it is build from DefMsg, which
255   //! gives the message code plus the designation of items of the
256   //! CaseData to be added to the Msg
257   //! Empty if no message attached
258   //!
259   //! Remains to be implemented
260   Standard_EXPORT Message_Msg Msg() const;
261   
262   //! Sets a Code to give a Warning
263   Standard_EXPORT static void SetDefWarning (const Standard_CString acode);
264   
265   //! Sets a Code to give a Fail
266   Standard_EXPORT static void SetDefFail (const Standard_CString acode);
267   
268   //! Returns Check Status for a Code : 0 non/info (default),
269   //! 1 warning, 2 fail
270   //!
271   //! Remark : DefCheck is used to set the check status of a
272   //! CaseData when it is attached to a case code, it can be changed
273   //! later (by SetFail, SetWarning, ResetCheck)
274   Standard_EXPORT static Standard_Integer DefCheck (const Standard_CString acode);
275   
276   //! Attaches a message definition to a case code
277   //! This definition includes the message code plus designation of
278   //! items of the CaseData to be added to the message (this part
279   //! not yet implemented)
280   Standard_EXPORT static void SetDefMsg (const Standard_CString casecode, const Standard_CString mesdef);
281   
282   //! Returns the message definition for a case code
283   //! Empty if no message attached
284   Standard_EXPORT static Standard_CString DefMsg (const Standard_CString casecode);
285
286
287
288
289   DEFINE_STANDARD_RTTIEXT(MoniTool_CaseData,Standard_Transient)
290
291 protected:
292
293
294
295
296 private:
297
298
299   Standard_Integer thecheck;
300   Standard_Integer thesubst;
301   TCollection_AsciiString thecase;
302   TCollection_AsciiString thename;
303   TColStd_SequenceOfTransient thedata;
304   TColStd_SequenceOfInteger thekind;
305   TColStd_SequenceOfAsciiString thednam;
306
307
308 };
309
310
311
312
313
314
315
316 #endif // _MoniTool_CaseData_HeaderFile