1 -- Created on: 1992-02-10
2 -- Created by: Christian CAILLET
3 -- Copyright (c) 1992-1999 Matra Datavision
4 -- Copyright (c) 1999-2014 OPEN CASCADE SAS
6 -- This file is part of Open CASCADE Technology software library.
8 -- This library is free software; you can redistribute it and/or modify it under
9 -- the terms of the GNU Lesser General Public License version 2.1 as published
10 -- by the Free Software Foundation, with special exception defined in the file
11 -- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 -- distribution for complete text of the license and disclaimer of any warranty.
14 -- Alternatively, this file may be used under the terms of Open CASCADE
15 -- commercial license or contractual agreement.
17 deferred class FileReaderData from Interface inherits TShared
19 ---Purpose : This class defines services which permit to access Data issued
20 -- from a File, in a form which does not depend of physical
21 -- format : thus, each Record has an attached ParamList (to be
22 -- managed) and resulting Entity.
24 -- Each Interface defines its own FileReaderData : on one hand by
25 -- defining deferred methods given here, on the other hand by
26 -- describing literal data and their accesses, with the help of
27 -- basic classes such as String, Array1OfString, etc...
29 -- FileReaderData is used by a FileReaderTool, which is also
30 -- specific of each Norm, to read an InterfaceModel of the Norm
31 -- FileReaderData inherits TShared to be accessed by Handle :
32 -- this allows FileReaderTool to define more easily the specific
33 -- methods, and improves memory management.
35 uses Integer, Boolean, CString, Transient, AsciiString from TCollection,
36 Array1OfInteger from TColStd, Array1OfTransient from TColStd,
37 InterfaceModel, Check, FileParameter, ParamSet, ParamList, ParamType
43 Initialize (nbr : Integer; npar : Integer);
44 ---Purpose : Initializes arrays of Entities and of ParamLists attached
45 -- to registered records
46 -- <nbr> must be the maximum number of records to get (no way to
47 -- extend it at run-time) : count entities and sub-entities ...
48 -- <npar> is the total count of parameters (if it is not exact,
49 -- it will be extented as necessary)
51 -- Hence, to each record can be bound an Entity and a list of
52 -- Parameters. Each kind of FileReaderData can add other data, by
53 -- having them in parallel (other arrays with same sizes)
54 -- Else, it must manage binding between items and their data
57 NbRecords (me) returns Integer is virtual;
58 ---Purpose : Returns the count of registered records
59 -- That is, value given for Initialization (can be redefined)
61 NbEntities (me) returns Integer is virtual;
62 ---Purpose : Returns the count of entities. Depending of each norm, records
63 -- can be Entities or SubParts (SubList in STEP, SubGroup in SET
64 -- ...). NbEntities counts only Entities, not Subs
65 -- Used for memory reservation in InterfaceModel
66 -- Default implementation uses FindNextRecord
67 -- Can be redefined into a more performant way
69 FindNextRecord (me; num : Integer) returns Integer is deferred;
70 ---Purpose : Determines the record number defining an Entity following a
71 -- given record number. Specific to each sub-class of
72 -- FileReaderData. Returning zero means no record found
74 -- -- access to Paramaters -- --
76 InitParams (me : mutable; num : Integer);
77 ---Purpose : attaches an empty ParamList to a Record
79 AddParam (me : mutable; num : Integer; aval : CString;
80 atype : ParamType; nument : Integer = 0);
81 ---Purpose : Adds a parameter to record no "num" and fills its fields
82 -- (EntityNumber is optional)
83 -- Warning : <aval> is assumed to be memory-managed elsewhere : it is NOT
84 -- copied. This gives a best speed : strings remain stored in
85 -- pages of characters
87 AddParam (me : mutable; num : Integer; aval : AsciiString from TCollection;
88 atype : ParamType; nument : Integer = 0);
89 ---Purpose : Same as above, but gets a AsciiString from TCollection
90 -- Remark that the content of the AsciiString is locally copied
91 -- (because its content is most often lost after using)
93 AddParam (me : mutable; num : Integer; FP : FileParameter);
94 ---Purpose : Same as above, but gets a complete FileParameter
95 -- Warning : Content of <FP> is NOT copied : its original address and space
96 -- in memory are assumed to be managed elsewhere (see ParamSet)
98 SetParam (me : mutable; num, nump : Integer; FP : FileParameter);
99 ---Purpose : Sets a new value for a parameter of a record, given by :
100 -- num : record number; nump : parameter number in the record
102 NbParams (me; num : Integer) returns Integer is static;
103 ---Purpose : Returns count of parameters attached to record "num"
104 -- If <num> = 0, returns the total recorded count of parameters
106 Params (me; num : Integer) returns ParamList is static;
107 ---Purpose : Returns the complete ParamList of a record (read only)
108 -- num = 0 to return the whole param list for the file
110 Param (me; num, nump : Integer) returns FileParameter is static;
111 ---Purpose : Returns parameter "nump" of record "num", as a complete
113 ---C++ : return const &
115 ChangeParam (me : mutable; num, nump : Integer) returns FileParameter
117 ---Purpose : Same as above, but in order to be modified on place
120 ParamType (me; num, nump : Integer) returns ParamType is static;
121 ---Purpose : Returns type of parameter "nump" of record "num"
123 -- ParamValue (me; num, nump : Integer) returns AsciiString from TCollection;
124 ---Purpose : Returns literal value of parameter "nump" of record "num"
125 -- was C++ : return const &
127 ParamCValue (me; num, nump : Integer) returns CString is static;
128 ---Purpose : Same as above, but as a CString
129 -- was C++ : return const
131 IsParamDefined (me; num, nump : Integer) returns Boolean is static;
132 ---Purpose : Returns True if parameter "nump" of record "num" is defined
133 -- (it is not if its type is ParamVoid)
135 ParamNumber (me; num, nump : Integer) returns Integer is static;
136 ---Purpose : Returns record number of an entity referenced by a parameter
137 -- of type Ident; 0 if no EntityNumber has been determined
138 -- Note that it is used to reference Entities but also Sublists
139 -- (sublists are not objects, but internal descriptions)
141 ParamEntity (me; num, nump : Integer)
142 returns Transient raises NoSuchObject is static;
143 ---Purpose : Returns the StepEntity referenced by a parameter
145 ---C++ : return const &
147 ChangeParameter (me : mutable; numpar : Integer) returns FileParameter
149 ---Purpose : Returns a parameter given its absolute rank in the file
150 -- in order to be consulted or modified in specilaized actions
153 ParamPosition (me; numpar : Integer; num,nump : out Integer)
155 ---Purpose : For a given absolute rank of parameter, determines the
156 -- record to which its belongs, and the parameter number for it
158 ParamFirstRank (me; num : Integer) returns Integer is static;
159 ---Purpose : Returns the absolute rank of the beginning of a record
160 -- (its lsit is from ParamFirstRank+1 to ParamFirstRank+NbParams)
162 -- -- binding empty entities before loading model -- --
164 BoundEntity (me; num : Integer) returns Transient;
165 ---Purpose : Returns the entity bound to a record, set by SetEntities
166 ---C++ : return const &
168 BindEntity (me : mutable; num : Integer; ent : Transient);
169 ---Purpose : Binds an entity to a record
171 SetErrorLoad (me : mutable; val : Boolean);
172 ---Purpose : Sets the status "Error Load" on, to overside check fails
173 -- <val> True : declares unloaded
174 -- <val> False : declares loaded
175 -- If not called before loading (see FileReaderTool), check fails
177 -- IsErrorLoad says if SetErrorLoad has been called by user
178 -- ResetErrorLoad resets it (called by FileReaderTool)
179 -- This allows to specify that the currently loaded entity
180 -- remains unloaded (because of syntactic fail)
182 IsErrorLoad (me) returns Boolean;
183 ---Purpose : Returns True if the status "Error Load" has been set (to True
186 ResetErrorLoad (me : mutable) returns Boolean;
187 ---Purpose : Returns the former value of status "Error Load" then resets it
188 -- Used to read the status then ensure it is reset
192 Destroy (me : mutable);
193 ---Purpose : Destructor (waiting for memory management)
196 Fastof (myclass; str : CString) returns Real;
197 ---Purpose : Same spec.s as standard <atof> but 5 times faster
201 thenum0 : Integer; -- current data for access to parameters
203 theparams : ParamSet; -- the general set of parameters
204 thenumpar : Array1OfInteger from TColStd; -- beginning of each one
205 -- thenbpar : Array1OfInteger from TColStd; -- its size
206 theents : Array1OfTransient from TColStd; -- entities bound to records