0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / MoniTool / MoniTool_Stat.cxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14
15 #include <MoniTool_Stat.hxx>
16 #include <TCollection_AsciiString.hxx>
17 #include <TCollection_HAsciiString.hxx>
18
19 //static MoniTool_Stat Statvoid("");
20 //static MoniTool_Stat Statact ("");
21 //not Used
22 //static Standard_CString voidname = "";
23 MoniTool_Stat::MoniTool_Stat (const Standard_CString title)
24 {
25   thetit  = new TCollection_HAsciiString(title);
26   thelev  = 0;
27   thetot  = new TColStd_HArray1OfInteger (1,20);  thetot->Init(0);
28   thedone = new TColStd_HArray1OfInteger (1,20);  thetot->Init(0);
29   thecurr = new TColStd_HArray1OfInteger (1,20);  thetot->Init(0);
30 }
31
32     MoniTool_Stat::MoniTool_Stat (const MoniTool_Stat& )
33     : thelev(0)
34 {
35 }
36
37     MoniTool_Stat&  MoniTool_Stat::Current ()
38 {
39   static MoniTool_Stat thecur;
40   return thecur;
41 }
42
43     Standard_Integer  MoniTool_Stat::Open (const Standard_Integer nb)
44 {
45   thelev ++;
46   thetot->SetValue(thelev,nb);
47   thedone->SetValue(thelev,0);
48   thecurr->SetValue(thelev,0);
49   return thelev;
50 }
51
52 void  MoniTool_Stat::OpenMore (const Standard_Integer id, const Standard_Integer nb)
53 {
54   if (id <= 0 || id > thelev) return;
55   thetot->SetValue (id, thetot->Value(id)+nb);
56 }
57
58 void  MoniTool_Stat::Add (const Standard_Integer nb)
59 {
60   thedone->SetValue (thelev, thedone->Value(thelev) + nb);
61   thecurr->SetValue (thelev, 0);
62 }
63
64 void  MoniTool_Stat::AddSub (const Standard_Integer nb)
65 {
66   thecurr->SetValue (thelev, nb);
67 }
68
69 void  MoniTool_Stat::AddEnd ()
70 {
71   thedone->SetValue (thelev, thedone->Value(thelev) + thecurr->Value(thelev));
72   thecurr->SetValue (thelev, 0);
73 }
74
75 void MoniTool_Stat::Close (const Standard_Integer id)
76 {
77   if (id < thelev) Close (id+1);
78   AddEnd();
79   thelev --;
80 }
81
82 Standard_Integer  MoniTool_Stat::Level () const
83 {  return thelev;  }
84
85 Standard_Real  MoniTool_Stat::Percent (const Standard_Integer fromlev) const
86 {
87   if (fromlev > thelev) return 0;
88   Standard_Real r1,r2,r3;
89   Standard_Integer tot  = thetot->Value(fromlev);
90   Standard_Integer done = thedone->Value(fromlev);
91   if (done >= tot) return 100.;
92   if (fromlev == thelev) {
93     r1 = tot;  r2 = done;
94     return (r2*100)/r1;
95   }
96   Standard_Integer cur = thecurr->Value(fromlev);
97   r1 = tot;  r2 = done;
98   r3 = 0;
99   if (cur > 0) { r3 = cur; r3 = cur/tot; r3 = r3*Percent (fromlev+1); }
100   if (r1 == 0) return 1;
101   return (r2*100)/r1 + r3;
102 }