0025748: Parallel version of progress indicator
[occt.git] / src / BOPAlgo / BOPAlgo_Options.cxx
1 // Created by: Eugeny MALTCHIKOV
2 // Copyright (c) 2017 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15
16 #include <BOPAlgo_Options.hxx>
17 #include <Message_MsgFile.hxx>
18 #include <Message_ProgressScope.hxx>
19 #include <NCollection_BaseAllocator.hxx>
20 #include <TCollection_AsciiString.hxx>
21 #include <Precision.hxx>
22 #include <Standard_NotImplemented.hxx>
23 #include <Standard_ProgramError.hxx>
24
25 namespace
26 {
27   Standard_Boolean myGlobalRunParallel = Standard_False;
28
29   // Initialize textual messages for errors and warnings defined in BOPAlgo
30   #include "BOPAlgo_BOPAlgo_msg.pxx"
31   bool BOPAlgo_InitMessages = false;
32   void BOPAlgo_LoadMessages ()
33   {
34     if (BOPAlgo_InitMessages)
35       return;
36     BOPAlgo_InitMessages = true;
37
38     if (! Message_MsgFile::HasMsg ("BOPAlgo_LOAD_CHECKER"))
39     {
40       Message_MsgFile::LoadFromString (BOPAlgo_BOPAlgo_msg);
41     }
42   }
43 }
44
45 //=======================================================================
46 // function: 
47 // purpose: 
48 //=======================================================================
49 BOPAlgo_Options::BOPAlgo_Options()
50 :
51   myAllocator(NCollection_BaseAllocator::CommonBaseAllocator()),
52   myReport(new Message_Report),
53   myRunParallel(myGlobalRunParallel),
54   myFuzzyValue(Precision::Confusion()),
55   myProgressScope(0L),
56   myUseOBB(Standard_False)
57 {
58   BOPAlgo_LoadMessages();
59 }
60
61 //=======================================================================
62 // function: 
63 // purpose: 
64 //=======================================================================
65 BOPAlgo_Options::BOPAlgo_Options
66   (const Handle(NCollection_BaseAllocator)& theAllocator)
67 :
68   myAllocator(theAllocator),
69   myReport(new Message_Report),
70   myRunParallel(myGlobalRunParallel),
71   myFuzzyValue(Precision::Confusion()),
72   myProgressScope(0L),
73   myUseOBB(Standard_False)
74 {
75   BOPAlgo_LoadMessages();
76 }
77
78 //=======================================================================
79 // function: ~
80 // purpose: 
81 //=======================================================================
82 BOPAlgo_Options::~BOPAlgo_Options()
83 {
84 }
85
86 //=======================================================================
87 //function : DumpErrors
88 //purpose  : 
89 //=======================================================================
90 void BOPAlgo_Options::DumpErrors(Standard_OStream& theOS) const
91 {
92   myReport->Dump (theOS, Message_Fail);
93 }
94
95 //=======================================================================
96 //function : DumpWarnings
97 //purpose  : 
98 //=======================================================================
99 void BOPAlgo_Options::DumpWarnings(Standard_OStream& theOS) const
100 {
101   myReport->Dump (theOS, Message_Warning);
102 }
103
104 //=======================================================================
105 // function: 
106 // purpose: 
107 //=======================================================================
108 void BOPAlgo_Options::SetParallelMode(Standard_Boolean theNewMode)
109 {
110   myGlobalRunParallel = theNewMode;
111 }
112
113 //=======================================================================
114 // function: 
115 // purpose: 
116 //=======================================================================
117 Standard_Boolean BOPAlgo_Options::GetParallelMode()
118 {
119   return myGlobalRunParallel;
120 }
121
122
123 //=======================================================================
124 //function : SetFuzzyValue
125 //purpose  : 
126 //=======================================================================
127 void BOPAlgo_Options::SetFuzzyValue(const Standard_Real theFuzz)
128 {
129   myFuzzyValue = Max(theFuzz, Precision::Confusion());
130 }
131
132
133 //=======================================================================
134 //function : SetProgressIndicator
135 //purpose  : 
136 //=======================================================================
137 void BOPAlgo_Options::SetProgressIndicator
138   (const Message_ProgressScope& theScope)
139 {
140   myProgressScope = &theScope;
141 }
142
143 //=======================================================================
144 //function : UserBreak
145 //purpose  : 
146 //=======================================================================
147 void BOPAlgo_Options::UserBreak() const
148 {
149   if (!myProgressScope) {
150     return;
151   }
152   if (myProgressScope->UserBreak()) {
153     throw Standard_NotImplemented("BOPAlgo_Options::UserBreak(), method is not implemented");
154   }
155 }