0026377: Passing Handle objects as arguments to functions as non-const reference...
[occt.git] / src / IFSelect / IFSelect_SelectCombine.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 <IFGraph_Cumulate.hxx>
16 #include <IFSelect_SelectCombine.hxx>
17 #include <IFSelect_Selection.hxx>
18 #include <IFSelect_SelectionIterator.hxx>
19 #include <Standard_Type.hxx>
20
21 IMPLEMENT_STANDARD_RTTIEXT(IFSelect_SelectCombine,IFSelect_Selection)
22
23 IFSelect_SelectCombine::IFSelect_SelectCombine ()    {  }
24 //      {  thelist = new IFSelect_SequenceOfSelection();  }
25
26     Standard_Integer  IFSelect_SelectCombine::NbInputs () const 
27       {  return thelist.Length();  }
28
29     Handle(IFSelect_Selection)  IFSelect_SelectCombine::Input
30   (const Standard_Integer num) const 
31       {  return thelist.Value(num);  }
32
33     Standard_Integer  IFSelect_SelectCombine::InputRank
34   (const Handle(IFSelect_Selection)& sel) const 
35 {
36   if (sel.IsNull()) return 0;
37   Standard_Integer i, nb = thelist.Length();
38   for (i = 1; i <= nb; i ++)
39     if (sel == thelist.Value(i)) return i;
40   return 0;
41 }
42
43     void  IFSelect_SelectCombine::Add
44   (const Handle(IFSelect_Selection)& sel, const Standard_Integer atnum)
45 {
46   if (atnum <= 0 || atnum > thelist.Length()) thelist.Append(sel);
47   else thelist.InsertBefore(atnum,sel);
48 }
49
50     Standard_Boolean  IFSelect_SelectCombine::Remove
51   (const Handle(IFSelect_Selection)& sel)
52       {  return Remove (InputRank(sel));  }
53
54     Standard_Boolean  IFSelect_SelectCombine::Remove
55   (const Standard_Integer num)
56 {
57   if (num <= 0 || num > thelist.Length()) return Standard_False;
58   thelist.Remove(num);
59   return Standard_True;
60 }
61
62
63     Standard_Boolean  IFSelect_SelectCombine::HasUniqueResult () const 
64       {  return Standard_True;  }
65
66     void  IFSelect_SelectCombine::FillIterator
67   (IFSelect_SelectionIterator& iter) const 
68       {  iter.AddList(thelist);  }