mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-07-05 12:15:50 +03:00
271 lines
13 KiB
Plaintext
Executable File
271 lines
13 KiB
Plaintext
Executable File
-- File: IFSelect_SessionFile.cdl
|
|
-- Created: Wed Nov 3 19:31:56 1993
|
|
-- Author: Christian CAILLET
|
|
-- <cky@sdsun2>
|
|
---Copyright: Matra Datavision 1993
|
|
|
|
|
|
class SessionFile from IFSelect
|
|
|
|
---Purpose : A SessionFile is intended to manage access between a
|
|
-- WorkSession and an Ascii Form, to be considered as a Dump.
|
|
-- It allows to write the File from the WorkSession, and later
|
|
-- read the File to the WorkSession, by keeping required
|
|
-- descriptions (such as dependances).
|
|
--
|
|
-- The produced File is under an Ascii Form, then it may be
|
|
-- easily consulted.
|
|
-- It is possible to cumulate reading of several Files. But in
|
|
-- case of Names conflict, the newer Names are forgottens.
|
|
--
|
|
-- The Dump supports the description of XSTEP functionnalities
|
|
-- (Sharing an Interface File, with Selections, Dispatches,
|
|
-- Modifiers ...) but does not refer to the Interface File
|
|
-- which is currently loaded.
|
|
--
|
|
-- SessionFile works with a library of SessionDumper type objects
|
|
--
|
|
-- The File is Produced as follows :
|
|
-- SessionFile produces all general Informations (such as Int and
|
|
-- Text Parameters, Types and Inputs of Selections, Dispatches,
|
|
-- Modifiers ...) and calls the SessionDumpers to produce all
|
|
-- the particular Data : creation arguments, parameters to be set
|
|
-- It is Read in the same terms :
|
|
-- SessionFile reads and interprets all general Informations,
|
|
-- and calls the SessionDumpers to recognize Types and for a
|
|
-- recognized Type create the corresponding Object with its
|
|
-- particular parameters as they were written.
|
|
-- The best way to work is to have one SessionDumper for each
|
|
-- consistent set of classes (e.g. a package).
|
|
|
|
uses CString, Character, Transient,
|
|
AsciiString from TCollection, SequenceOfAsciiString from TColStd,
|
|
HArray1OfInteger from TColStd, DictionaryOfInteger,
|
|
WorkSession
|
|
|
|
is
|
|
|
|
Create (WS : mutable WorkSession) returns SessionFile;
|
|
---Purpose : Creates a SessionFile, ready to read Files in order to load
|
|
-- them into a given WorkSession.
|
|
-- The following Read Operations must then be called.
|
|
-- It is also possible to perform a Write, which produces a
|
|
-- complete File of all the content of the WorkSession.
|
|
|
|
Create (WS : WorkSession; filename : CString) returns SessionFile;
|
|
---Purpose : Creates a SessionFile which Writes the content of a WorkSession
|
|
-- to a File (directly calls Write)
|
|
-- Then, IsDone aknowledges on the result of the Operation.
|
|
-- But such a SessionFile may not Read a File to a WorkSession.
|
|
|
|
ClearLines (me : in out);
|
|
---Purpose : Clears the lines recorded whatever for writing or for reading
|
|
|
|
NbLines (me) returns Integer;
|
|
---Purpose : Returns the count of recorded lines
|
|
|
|
Line (me; num : Integer) returns AsciiString from TCollection;
|
|
---Purpose : Returns a line given its rank in the list of recorded lines
|
|
---C++ : return const &
|
|
|
|
AddLine (me : in out; line : CString);
|
|
---Purpose : Adds a line to the list of recorded lines
|
|
|
|
RemoveLastLine (me : in out);
|
|
---Purpose : Removes the last line. Can be called recursively.
|
|
-- Does nothing if the list is empty
|
|
|
|
WriteFile (me : in out; name : CString) returns Boolean;
|
|
---Purpose : Writes the recorded lines to a file named <name> then clears
|
|
-- the list of lines.
|
|
-- Returns False (with no clearing) if the file could not be
|
|
-- created
|
|
|
|
ReadFile (me : in out; name : CString) returns Boolean;
|
|
---Purpose : Reads the recorded lines from a file named <name>, after
|
|
-- having cleared the list (stops if RecognizeFile fails)
|
|
-- Returns False (with no clearing) if the file could not be read
|
|
|
|
RecognizeFile (me : in out; headerline : CString) returns Boolean;
|
|
---Purpose : Recognizes the header line. returns True if OK, False else
|
|
|
|
|
|
Write (me : in out; filename : CString) returns Integer;
|
|
---Purpose : Performs a Write Operation from a WorkSession to a File
|
|
-- i.e. calls WriteSession then WriteEnd, and WriteFile
|
|
-- Returned Value is : 0 for OK, -1 File could not be created,
|
|
-- >0 Error during Write (see WriteSession)
|
|
-- IsDone can be called too (will return True for OK)
|
|
|
|
Read (me : in out; filename : CString) returns Integer;
|
|
---Purpose : Performs a Read Operation from a file to a WorkSession
|
|
-- i.e. calls ReadFile, then ReadSession and ReadEnd
|
|
-- Returned Value is : 0 for OK, -1 File could not be opened,
|
|
-- >0 Error during Read (see WriteSession)
|
|
-- IsDone can be called too (will return True for OK)
|
|
|
|
|
|
-- Specific actions : Write and Read the content of a WorkSession --
|
|
|
|
WriteSession (me : in out) returns Integer;
|
|
---Purpose : Prepares the Write operation from a WorkSession (IFSelect) to
|
|
-- a File, i.e. fills the list of lines (the file itself remains
|
|
-- to be written; or NbLines/Line may be called)
|
|
-- Important Remark : this excludes the reading of the last line,
|
|
-- which is performed by WriteEnd
|
|
-- Returns 0 if OK, status > 0 in case of error
|
|
|
|
WriteEnd (me : in out) returns Integer;
|
|
---Purpose : Writes the trailing line. It is separate from WriteSession,
|
|
-- in order to allow to redefine WriteSession without touching
|
|
-- WriteEnd (WriteSession defines the body of the file)
|
|
-- WriteEnd fills the list of lines. Returns a status of error,
|
|
-- 0 if OK, >0 else
|
|
|
|
WriteLine (me : in out; line : CString; follow : Character = 0);
|
|
---Purpose : Writes a line to the File. If <follow> is given, it is added
|
|
-- at the following of the line. '\n' must be added for the end.
|
|
|
|
WriteOwn (me : in out; item : Transient) returns Boolean;
|
|
---Purpose : Writes the Parameters own to each type of Item. Uses the
|
|
-- Library of SessionDumpers
|
|
-- Returns True if Done, False if <item> could not be treated
|
|
-- (hence it remains written with no Own Parameter)
|
|
|
|
ReadSession (me : in out) returns Integer;
|
|
---Purpose : Performs a Read Operation from a File to a WorkSession, i.e.
|
|
-- reads the list of line (which must have already been loaded,
|
|
-- by ReadFile or by calls to AddLine)
|
|
-- Important Remark : this excludes the reading of the last line,
|
|
-- which is performed by ReadEnd
|
|
-- Returns 0 for OK, >0 status for Read Error (not a suitable
|
|
-- File, or WorkSession given as Immutable at Creation Time)
|
|
-- IsDone can be called too (will return True for OK)
|
|
|
|
ReadEnd (me : in out) returns Integer;
|
|
---Purpose : Reads the end of a file (its last line). Returns 0 if OK,
|
|
-- status >0 in case of error (not a suitable end line).
|
|
|
|
|
|
ReadLine (me : in out) returns Boolean;
|
|
---Purpose : Reads a Line and splits it into a set of alphanumeric items,
|
|
-- which can then be queried by NbParams/ParamValue ...
|
|
|
|
SplitLine (me : in out; line : CString);
|
|
---Purpose : Internal routine which processes a line into words
|
|
-- and prepares its exploration
|
|
|
|
ReadOwn (me : in out; item : out mutable Transient) returns Boolean;
|
|
---Purpose : Tries to Read an Item, by calling the Library of Dumpers
|
|
-- Sets the list of parameters of the line to be read from the
|
|
-- first own one
|
|
|
|
AddItem (me : in out; item : Transient; active : Boolean = Standard_True);
|
|
---Purpose : Adds an Item to the WorkSession, taken as Name the first
|
|
-- item of the read Line. If this Name is not a Name but a Number
|
|
-- or if this Name is already recorded in the WorkSession, it
|
|
-- adds the Item but with no Name. Then the Name is recorded
|
|
-- in order to be used by the method ItemValue
|
|
-- <active> commands to make <item> active or not in the session
|
|
|
|
IsDone (me) returns Boolean;
|
|
---Purpose : Returns True if the last Read or Write operation has been
|
|
-- corectly performed. ELse returns False.
|
|
|
|
WorkSession (me) returns WorkSession;
|
|
---Purpose : Returns the WorkSession on which a SessionFile works.
|
|
-- Remark that it is returned as Immutable.
|
|
|
|
-- The following methods are used by SessionDumper to perform
|
|
-- their ReadOwn and WriteOwn
|
|
|
|
NewItem (me : in out; ident : Integer; par : Transient);
|
|
---Purpose : At beginning of writing an Item, writes its basics :
|
|
-- - either its name in the session if it has one
|
|
-- - or its relative number of item in the file, else
|
|
-- (preceeded by a '_')
|
|
-- - then, its Dynamic Type (in the sense of cdl : pk_class)
|
|
-- This basic description can be followed by the parameters
|
|
-- which are used in the definition of the item.
|
|
|
|
SetOwn (me : in out; mode : Boolean);
|
|
---Purpose : Sets Parameters to be sent as Own if <mode> is True (their
|
|
-- Name or Number or Void Mark or Text Value is preceeded by a
|
|
-- Column sign ':') else they are sent normally
|
|
-- Hence, the Own Parameter are clearly identified in the File
|
|
|
|
SendVoid (me : in out);
|
|
---Purpose : During a Write action, commands to send a Void Parameter
|
|
-- i.e. a Parameter which is present but undefined
|
|
-- Its form will be the dollar sign : $
|
|
|
|
SendItem (me : in out; par : Transient);
|
|
---Purpose : During a Write action, commands to send the identification of
|
|
-- a Parameter : if it is Null (undefined) it is send as Void ($)
|
|
-- if it is Named in the WorkSession, its Name is sent preceeded
|
|
-- by ':', else a relative Ident Number is sent preceeded by '#'
|
|
-- (relative to the present Write, i.e. starting at one, without
|
|
-- skip, and counted part from Named Items)
|
|
|
|
SendText (me : in out; text : CString);
|
|
---Purpose : During a Write action, commands to send a Text without
|
|
-- interpretation. It will be sent as well
|
|
|
|
|
|
SetLastGeneral (me : in out; lastgen : Integer);
|
|
---Purpose : Sets the rank of Last General Parameter to a new value. It is
|
|
-- followed by the Fist Own Parameter of the item.
|
|
-- Used by SessionFile after reading general parameters.
|
|
|
|
NbParams (me) returns Integer;
|
|
---Purpose : During a Read operation, SessionFile processes sequencially
|
|
-- the Items to read. For each one, it gives access to the list
|
|
-- of its Parameters : they were defined by calls to
|
|
-- SendVoid/SendParam/SendText during Writing the File.
|
|
-- NbParams returns the count of Parameters for the line
|
|
-- currently read.
|
|
|
|
IsVoid (me; num : Integer) returns Boolean;
|
|
---Purpose : Returns True if a Parameter, given its rank in the Own List
|
|
-- (see NbOwnParams), is Void. Returns also True if <num> is
|
|
-- out of range (undefined parameters)
|
|
|
|
IsText (me; num : Integer) returns Boolean;
|
|
---Purpose : Returns True if a Parameter, in the Own List (see NbOwnParams)
|
|
-- is a Text (between "..."). Else it is an Item (Parameter,
|
|
-- Selection, Dispatch ...), which can be Void.
|
|
|
|
ParamValue (me; num : Integer) returns AsciiString from TCollection;
|
|
---Purpose : Returns a Parameter (alphanumeric item of a line) as it
|
|
-- has been read
|
|
---C++ : return const &
|
|
|
|
TextValue (me; num : Integer) returns AsciiString from TCollection;
|
|
---Purpose : Returns the content of a Text Parameter (without the quotes).
|
|
-- Returns an empty string if the Parameter is not a Text.
|
|
|
|
ItemValue (me; num : Integer) returns mutable Transient;
|
|
---Purpose : Returns a Parameter as an Item. Returns a Null Handle if the
|
|
-- Parameter is a Text, or if it is defined as Void
|
|
|
|
Destroy (me : in out);
|
|
---Purpose : Specific Destructor (closes the File if not yet done)
|
|
---C++ : alias ~
|
|
|
|
fields
|
|
|
|
themode : Boolean; -- Read(False) or Write(True)
|
|
thesess : WorkSession is protected;
|
|
thenums : HArray1OfInteger from TColStd is protected; -- for Write
|
|
thenames : DictionaryOfInteger is protected; -- for Read
|
|
thelist : SequenceOfAsciiString from TColStd; -- for the whole File
|
|
thenl : Integer is protected; -- line number in File
|
|
thebuff : AsciiString from TCollection;
|
|
theline : SequenceOfAsciiString from TColStd is protected; -- for a Line
|
|
thelastgen : Integer;
|
|
thedone : Boolean;
|
|
theownflag : Boolean;
|
|
thenewnum : Integer; -- to identify non-named items
|
|
|
|
end SessionFile;
|