0024157: Parallelization of assembly part of BO
[occt.git] / src / IFSelect / IFSelect_SelectSignedShared.cxx
1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
2 //
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
7 //
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
10 //
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
17
18 #include <IFSelect_SelectSignedShared.ixx>
19
20
21 IFSelect_SelectSignedShared::IFSelect_SelectSignedShared
22   (const Handle(IFSelect_Signature)& matcher,
23    const Standard_CString signtext, const Standard_Boolean exact,
24    const Standard_Integer level)
25     : IFSelect_SelectExplore (level) ,
26       thematcher (matcher) , thesigntext (signtext) , theexact (exact)    {  }
27  
28     Handle(IFSelect_Signature) IFSelect_SelectSignedShared::Signature () const
29       {  return thematcher;  }
30  
31     const TCollection_AsciiString&  IFSelect_SelectSignedShared::SignatureText () const
32       {  return thesigntext;  }
33
34     Standard_Boolean  IFSelect_SelectSignedShared::IsExact () const
35       {  return theexact;  }
36
37
38     Standard_Boolean  IFSelect_SelectSignedShared::Explore
39   (const Standard_Integer level, const Handle(Standard_Transient)& ent,
40    const Interface_Graph& G,  Interface_EntityIterator& explored) const
41 {
42   if (thematcher->Matches (ent,G.Model(),thesigntext,theexact)) return Standard_True;
43
44 //  sinon, on fait le tri ici
45   Interface_EntityIterator list = G.Shareds (ent);
46 //  Si plus de Shared, alors c est cuit
47   if (list.NbEntities() == 0) return Standard_False;
48
49 //  Sinon, trier si on est au niveau
50   if (level < Level()) {  explored = list;  return Standard_True;  }
51   for (list.Start(); list.More(); list.Next()) {
52     if (thematcher->Matches (list.Value(),G.Model(),thesigntext,theexact))
53       explored.AddItem (list.Value());
54   }
55   return Standard_True;
56 }
57
58
59     TCollection_AsciiString IFSelect_SelectSignedShared::ExploreLabel () const
60 {
61   TCollection_AsciiString lab("Shared,");
62   lab.AssignCat (thematcher->Name());
63   if (theexact) lab.AssignCat(" matching ");
64   else          lab.AssignCat(" containing ");
65   lab.AssignCat(thesigntext);
66   return lab;
67 }