0022941: Memory leak in StepData_StepReaderData.cxx line 1826
[occt.git] / src / StepData / StepData_ECDescr.cxx
1 #include <StepData_ECDescr.ixx>
2 #include <TCollection_AsciiString.hxx>
3 #include <StepData_Plex.hxx>
4
5     StepData_ECDescr::StepData_ECDescr  ()    {  }
6
7     void  StepData_ECDescr::Add (const Handle(StepData_ESDescr)& member)
8 {
9   if (member.IsNull()) return;
10   Standard_CString name = member->TypeName();
11   TCollection_AsciiString nam (name);
12   for (Standard_Integer i = NbMembers(); i > 0; i --) {
13     Handle(StepData_ESDescr) mem = Member(i);
14     if (nam.IsLess (mem->TypeName())) { thelist.InsertBefore (i,member); return; }
15   }
16   thelist.Append (member);
17 }
18
19     Standard_Integer  StepData_ECDescr::NbMembers () const
20       {  return thelist.Length();  }
21
22     Handle(StepData_ESDescr)  StepData_ECDescr::Member
23   (const Standard_Integer num) const
24       {  return Handle(StepData_ESDescr)::DownCast (thelist.Value(num));  }
25
26     Handle(TColStd_HSequenceOfAsciiString)  StepData_ECDescr::TypeList () const
27 {
28   Handle(TColStd_HSequenceOfAsciiString) tl = new TColStd_HSequenceOfAsciiString();
29   Standard_Integer i, nb = NbMembers();
30   for (i = 1; i <= nb; i ++) {
31     TCollection_AsciiString nam (Member(i)->TypeName());
32     tl->Append(nam);
33   }
34   return tl;
35 }
36
37
38     Standard_Boolean  StepData_ECDescr::Matches (const Standard_CString name) const
39 {
40   Standard_Integer i, nb = NbMembers();
41   for (i = 1; i <= nb; i ++) {
42     Handle(StepData_ESDescr) member = Member(i);
43     if (member->Matches(name)) return Standard_True;
44   }
45   return Standard_False;
46 }
47
48     Standard_Boolean  StepData_ECDescr::IsComplex () const
49       {  return Standard_True;  }
50
51     Handle(StepData_Described)  StepData_ECDescr::NewEntity () const
52 {
53   Handle(StepData_Plex) ent = new StepData_Plex (this);
54   Standard_Integer i, nb = NbMembers();
55   for (i = 1; i <= nb; i ++) {
56     Handle(StepData_ESDescr) member = Member(i);
57     Handle(StepData_Simple) mem = Handle(StepData_Simple)::DownCast(member->NewEntity());
58     if (!mem.IsNull()) ent->Add (mem);
59   }
60   return ent;
61 }