1 // Created on: 2004-11-23
2 // Created by: Pavel TELKOV
3 // Copyright (c) 2004-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15 
16 // The original implementation Copyright: (C) RINA S.p.A
17 
18 #include <TObj_SequenceIterator.hxx>
19 
20 #include <TObj_Object.hxx>
21 
22 
IMPLEMENT_STANDARD_RTTIEXT(TObj_SequenceIterator,TObj_ObjectIterator)23 IMPLEMENT_STANDARD_RTTIEXT(TObj_SequenceIterator,TObj_ObjectIterator)
24 
25 //=======================================================================
26 //function : TObj_SequenceIterator
27 //purpose  :
28 //=======================================================================
29 
30 TObj_SequenceIterator::TObj_SequenceIterator() :
31   myIndex( 1 )
32 {
33 }
34 
35 //=======================================================================
36 //function : TObj_SequenceIterator
37 //purpose  :
38 //=======================================================================
39 
TObj_SequenceIterator(const Handle (TObj_HSequenceOfObject)& theObjects,const Handle (Standard_Type)& theType)40 TObj_SequenceIterator::TObj_SequenceIterator
41   (const Handle(TObj_HSequenceOfObject)& theObjects,
42    const Handle(Standard_Type)&              theType)
43 {
44   myIndex = 1;
45   myType = theType;
46   myObjects = theObjects;
47 }
48 
49 //=======================================================================
50 //function : More
51 //purpose  :
52 //=======================================================================
53 
More() const54 Standard_Boolean TObj_SequenceIterator::More() const
55 {
56   const Standard_Boolean isMore = (!myObjects.IsNull() &&
57                                    (myIndex <= myObjects->Length() && myIndex > 0) &&
58                                    !myObjects->Value(myIndex).IsNull());
59 
60   // check type
61   if (isMore && !myType.IsNull() && !myObjects->Value(myIndex)->IsKind( myType ))
62   {
63     TObj_SequenceIterator* me = (TObj_SequenceIterator*) this;
64     me->Next();
65     return More();
66   }
67 
68   return isMore;
69 }
70 
71 //=======================================================================
72 //function : Next
73 //purpose  :
74 //=======================================================================
75 
Next()76 void TObj_SequenceIterator::Next()
77 { myIndex++; }
78 
79 //=======================================================================
80 //function : Value
81 //purpose  :
82 //=======================================================================
83 
Handle(TObj_Object)84 Handle(TObj_Object) TObj_SequenceIterator::Value() const
85 {
86   return myObjects->Value(myIndex);
87 }
88