0022627: Change OCCT memory management defaults
[occt.git] / src / RWStepBasic / RWStepBasic_RWSiUnitAndRatioUnit.cxx
1 #include <RWStepBasic_RWSiUnitAndRatioUnit.ixx>
2 #include <StepBasic_SiUnit.hxx>
3 #include <StepBasic_RatioUnit.hxx>
4 #include <StepBasic_DimensionalExponents.hxx>
5 #include <StepBasic_SiPrefix.hxx>
6 #include <StepBasic_SiUnitName.hxx>
7 #include <RWStepBasic_RWSiUnit.hxx>
8
9
10 RWStepBasic_RWSiUnitAndRatioUnit::RWStepBasic_RWSiUnitAndRatioUnit () {}
11
12 void RWStepBasic_RWSiUnitAndRatioUnit::ReadStep (const Handle(StepData_StepReaderData)& data,
13                                                  const Standard_Integer num0,
14                                                  Handle(Interface_Check)& ach,
15                                                  const Handle(StepBasic_SiUnitAndRatioUnit)& ent) const
16 {
17   
18   Standard_Integer num = num0;
19
20   // --- Instance of common supertype NamedUnit ---
21   if (!data->CheckNbParams(num,1,ach,"named_unit")) return;
22
23   // --- field : dimensions ---
24   // --- this field is redefined ---
25   //szv#4:S4163:12Mar99 `Standard_Boolean stat1 =` not needed
26   data->CheckDerived(num,1,"dimensions",ach,Standard_False);
27
28   // --- Instance of plex componant RatioUnit ---
29   num = data->NextForComplex(num);
30   if (!data->CheckNbParams(num,0,ach,"ratio_unit")) return;
31
32   // --- Instance of plex componant SiUnit ---
33   num = data->NextForComplex(num);
34   if (!data->CheckNbParams(num,2,ach,"si_unit")) return;
35
36   // --- field : prefix ---
37   RWStepBasic_RWSiUnit reader;
38   StepBasic_SiPrefix aPrefix;
39   Standard_Boolean hasAprefix = Standard_False;
40   if (data->IsParamDefined(num,1)) {
41     if (data->ParamType(num,1) == Interface_ParamEnum) {
42       Standard_CString text = data->ParamCValue(num,1);
43       hasAprefix = reader.DecodePrefix(aPrefix,text);
44       if(!hasAprefix)
45         ach->AddFail("Enumeration si_prefix has not an allowed value");
46     }
47     else ach->AddFail("Parameter #1 (prefix) is not an enumeration");
48   }
49
50   // --- field : name ---
51   StepBasic_SiUnitName aName;
52   if (data->ParamType(num,2) == Interface_ParamEnum) {
53     Standard_CString text = data->ParamCValue(num,2);
54     if(!reader.DecodeName(aName,text))
55       ach->AddFail("Enumeration si_unit_name has not an allowed value");
56   }
57   else ach->AddFail("Parameter #2 (name) is not an enumeration");
58   
59   //--- Initialisation of the red entity ---
60   ent->Init(hasAprefix,aPrefix,aName);
61 }
62
63
64 void RWStepBasic_RWSiUnitAndRatioUnit::WriteStep(StepData_StepWriter& SW,
65                                                  const Handle(StepBasic_SiUnitAndRatioUnit)& ent) const
66 {
67   
68   // --- Instance of plex componant RatioUnit ---
69   SW.StartEntity("RATIO_UNIT");
70
71   // --- Instance of common supertype NamedUnit ---
72   SW.StartEntity("NAMED_UNIT");
73   // --- field : dimensions ---
74   // --- redefined field ---
75   SW.SendDerived();
76
77   // --- Instance of plex componant SiUnit ---
78   SW.StartEntity("SI_UNIT");
79   
80   // --- field : prefix ---
81   RWStepBasic_RWSiUnit writer;
82   Standard_Boolean hasAprefix = ent->HasPrefix();
83   if (hasAprefix) 
84     SW.SendEnum(writer.EncodePrefix(ent->Prefix()));
85   else
86     SW.SendUndef();
87
88   // --- field : name ---
89   SW.SendEnum(writer.EncodeName(ent->Name()));
90 }