0022904: Clean up sccsid variables
[occt.git] / src / Expr / Expr_RelationIterator.cxx
1 // Copyright:   Matra-Datavision 1991
2 // File:        Expr_RelationIterator.cxx
3 // Created:     Thu Jun 13 16:57:35 1991
4 // Author:      Arnaud BOUZY
5 //              <adn>
6
7 #include <Expr_RelationIterator.ixx>
8 #include <Standard_NoMoreObject.hxx>
9 #include <Standard_NoSuchObject.hxx>
10 #include <Expr_SystemRelation.hxx>
11
12 Expr_RelationIterator::Expr_RelationIterator (const Handle(Expr_GeneralRelation)& rel):myRelation(1,rel->NbOfSingleRelations())
13 {
14   if (rel->IsKind(STANDARD_TYPE(Expr_SingleRelation))) {
15     myRelation(1) = Handle(Expr_SingleRelation)::DownCast(rel);
16   }
17   else {
18     Standard_Integer nbcur = 1;
19     Handle(Expr_GeneralRelation) currel;
20     for (Standard_Integer i =1; i<= rel->NbOfSubRelations(); i++) {
21       currel = rel->SubRelation(i);
22       if (currel->IsKind(STANDARD_TYPE(Expr_SingleRelation))) {
23         myRelation(nbcur) = Handle(Expr_SingleRelation)::DownCast(currel);
24         nbcur++;
25       }
26       else {
27         Expr_RelationIterator subit(currel);
28         while (subit.More()) {
29           myRelation(nbcur) = subit.Value();
30           subit.Next();
31           nbcur++;
32         }
33       }
34     }
35   }
36   current = 1;
37 }
38
39 Standard_Boolean Expr_RelationIterator::More () const
40 {
41   return (current <= myRelation.Length());
42 }
43
44 void Expr_RelationIterator::Next ()
45 {
46   if (!More()) {
47     Standard_NoMoreObject::Raise();
48   }
49   current++;
50 }
51
52 Handle(Expr_SingleRelation) Expr_RelationIterator::Value () const
53 {
54   if (!More()) {
55     Standard_NoSuchObject::Raise();
56   }
57   return myRelation(current);
58 }
59