0024947: Redesign OCCT legacy type system -- automatic
[occt.git] / src / TObj / TObj_SequenceIterator.cxx
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
23 //=======================================================================
24 //function : TObj_SequenceIterator
25 //purpose  :
26 //=======================================================================
27
28 TObj_SequenceIterator::TObj_SequenceIterator() :
29   myIndex( 1 )
30 {
31 }
32
33 //=======================================================================
34 //function : TObj_SequenceIterator
35 //purpose  :
36 //=======================================================================
37
38 TObj_SequenceIterator::TObj_SequenceIterator
39   (const Handle(TObj_HSequenceOfObject)& theObjects,
40    const Handle(Standard_Type)&              theType)
41 {
42   myIndex = 1;
43   myType = theType;
44   myObjects = theObjects;
45 }
46
47 //=======================================================================
48 //function : More
49 //purpose  :
50 //=======================================================================
51
52 Standard_Boolean TObj_SequenceIterator::More() const
53 {
54   const Standard_Boolean isMore = (!myObjects.IsNull() &&
55                                    (myIndex <= myObjects->Length() && myIndex > 0) &&
56                                    !myObjects->Value(myIndex).IsNull());
57
58   // check type
59   if (isMore && !myType.IsNull() && !myObjects->Value(myIndex)->IsKind( myType ))
60   {
61     TObj_SequenceIterator* me = (TObj_SequenceIterator*) this;
62     me->Next();
63     return More();
64   }
65
66   return isMore;
67 }
68
69 //=======================================================================
70 //function : Next
71 //purpose  :
72 //=======================================================================
73
74 void TObj_SequenceIterator::Next()
75 { myIndex++; }
76
77 //=======================================================================
78 //function : Value
79 //purpose  :
80 //=======================================================================
81
82 Handle(TObj_Object) TObj_SequenceIterator::Value() const
83 {
84   return myObjects->Value(myIndex);
85 }