0022941: Memory leak in StepData_StepReaderData.cxx line 1826
[occt.git] / src / StepData / StepData_ECDescr.cxx
CommitLineData
7fd59977 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}