// // // $Id: STEPaggregate.h,v 1.2 1999/05/21 20:20:30 japost Exp $ // GEANT4 tag $Name: geant4-00-01 $ // #ifndef STEPAGGREGATE_H #define STEPAGGREGATE_H /* * NIST STEP Core Class Library * clstepcore/STEPaggregate.h * May 1995 * K. C. Morris * David Sauder * Development of this software was funded by the United States Government, * and is not subject to copyright. */ /* */ #ifdef __O3DB__ #include #endif class InstMgr; class STEPaggregate; class Logical; class Boolean; class TypeDescriptor; #include "globals.hh" #include #include #include #include #include #include #include class STEPentity; #define S_ENTITY_NULL &NilSTEPentity extern STEPentity NilSTEPentity; #define AGGR_NULL &NilSTEPaggregate extern STEPaggregate NilSTEPaggregate; typedef unsigned short BOOLEAN; class SingleLinkNode; /****************************************************************************** ** *****************************************************************************/ typedef STEPaggregate * STEPaggregateH; class STEPaggregate : public SingleLinkList { protected: int _null; protected: virtual Severity ReadValue(istream &in, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId =0, int assignVal =1, int ExchangeFileFormat =1); public: int is_null() { return _null; } virtual Severity AggrValidLevel(const char *value, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int optional, char *tokenList, int addFileId =0, int clearError =0); virtual Severity AggrValidLevel(istream &in, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int optional, char *tokenList, int addFileId =0, int clearError =0); // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err =0, const TypeDescriptor *elem_type =0, InstMgr *insts =0, int addFileId = 0); virtual Severity STEPread (istream& in, ErrorDescriptor *err, const TypeDescriptor *elem_type =0, InstMgr *insts =0, int addFileId =0); // OUTPUT virtual const char *asStr(SCLstring & s) const; virtual void STEPwrite (ostream& out =G4cout) const; // SingleLinkNode * GetHead () const // { return (STEPnode *) SingleLinkList::GetHead(); } virtual SingleLinkNode * NewNode (); void AddNode (SingleLinkNode *); void Empty (); STEPaggregate (); virtual ~STEPaggregate (); // COPY - defined in subtypes virtual STEPaggregate& ShallowCopy (const STEPaggregate&); }; /****************************************************************** ** Class: GenericAggregate ** Description: This class supports LIST OF: ** SELECT_TYPE, BINARY_TYPE, GENERIC_TYPE, ENUM_TYPE, UNKNOWN_TYPE type ******************************************************************/ class GenericAggregate : public STEPaggregate { public: virtual SingleLinkNode *NewNode(); virtual STEPaggregate& ShallowCopy (const STEPaggregate&); GenericAggregate () { } virtual ~GenericAggregate () { } }; typedef GenericAggregate * GenericAggregateH; /****************************************************************************** ** *****************************************************************************/ class EntityAggregate : public STEPaggregate { public: virtual Severity ReadValue(istream &in, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId =0, int assignVal =1, int ExchangeFileFormat =1); virtual SingleLinkNode *NewNode(); virtual STEPaggregate& ShallowCopy (const STEPaggregate&); EntityAggregate (); virtual ~EntityAggregate (); }; typedef EntityAggregate * EntityAggregateH; /****************************************************************** ** Class: SelectAggregate ** Description: this is a minimal representions for a collection of ** STEPenumerations ******************************************************************/ class SelectAggregate : public STEPaggregate { public: virtual Severity ReadValue(istream &in, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId =0, int assignVal =1, int ExchangeFileFormat =1); virtual SingleLinkNode *NewNode (); virtual STEPaggregate& ShallowCopy (const STEPaggregate&); SelectAggregate (); virtual ~SelectAggregate (); }; typedef SelectAggregate * SelectAggregateH; /****************************************************************** ** Class: StringAggregate ** Description: This class supports LIST OF STRING type ******************************************************************/ class StringAggregate : public STEPaggregate { public: virtual SingleLinkNode *NewNode(); virtual STEPaggregate& ShallowCopy (const STEPaggregate&); StringAggregate () { } virtual ~StringAggregate () { } }; typedef StringAggregate * StringAggregateH; /****************************************************************** ** Class: BinaryAggregate ** Description: This class supports LIST OF BINARY type ******************************************************************/ class BinaryAggregate : public STEPaggregate { public: virtual SingleLinkNode *NewNode(); virtual STEPaggregate& ShallowCopy (const STEPaggregate&); BinaryAggregate () { } virtual ~BinaryAggregate () { } }; typedef BinaryAggregate * BinaryAggregateH; /****************************************************************** ** Class: EnumAggregate ** Description: this is a minimal representions for a collection of ** STEPenumerations ******************************************************************/ class EnumAggregate : public STEPaggregate { public: virtual SingleLinkNode *NewNode (); virtual STEPaggregate& ShallowCopy (const STEPaggregate&); EnumAggregate (); virtual ~EnumAggregate (); }; typedef EnumAggregate * EnumAggregateH; class Logicals : public EnumAggregate { public: virtual SingleLinkNode * NewNode (); Logicals () { } virtual ~Logicals () { } }; typedef Logicals * LogicalsH; inline Logicals * create_Logicals () { return new Logicals ; } class Booleans : public EnumAggregate { public: virtual SingleLinkNode * NewNode (); Booleans () { } virtual ~Booleans () { } }; typedef Booleans * BooleansH; inline Booleans * create_Booleans () { return new Booleans ; } class RealAggregate : public STEPaggregate { public: virtual SingleLinkNode *NewNode(); virtual STEPaggregate& ShallowCopy (const STEPaggregate&); RealAggregate () { } virtual ~RealAggregate () { } }; typedef RealAggregate * RealAggregateH; class IntAggregate : public STEPaggregate { public: virtual SingleLinkNode *NewNode(); virtual STEPaggregate& ShallowCopy (const STEPaggregate&); IntAggregate () { } virtual ~IntAggregate () { } }; typedef IntAggregate * IntAggregateH; /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// class STEPnode : public SingleLinkNode { protected: int _null; public: int is_null() { return _null; } void set_null() { _null = 1; } // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err); virtual Severity StrToVal(istream &in, ErrorDescriptor *err); virtual Severity STEPread(const char *s, ErrorDescriptor *err); virtual Severity STEPread(istream &in, ErrorDescriptor *err); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite(SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); }; typedef STEPnode * STEPnodeH; /****************************************************************** ** Class: GenericNode ** Description: This class is for the Nodes of GenericAggregates ******************************************************************/ class GenericAggrNode : public STEPnode { public: SCLundefined value; public: // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err); virtual Severity StrToVal(istream &in, ErrorDescriptor *err); virtual Severity STEPread(const char *s, ErrorDescriptor *err); virtual Severity STEPread(istream &in, ErrorDescriptor *err); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite(SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); // CONSTRUCTORS GenericAggrNode (const char *str); GenericAggrNode (GenericAggrNode& gan); GenericAggrNode (); ~GenericAggrNode (); virtual SingleLinkNode * NewNode (); }; ///////////////////////////////////////////////////////////////////////////// class EntityNode : public STEPnode { public: STEPentity * node; // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId = 0); virtual Severity StrToVal(istream &in, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId = 0); virtual Severity STEPread(const char *s, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId = 0); virtual Severity STEPread(istream &in, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId = 0); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite (SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); // CONSTRUCTORS EntityNode (STEPentity * e); EntityNode () { } ~EntityNode () { } virtual SingleLinkNode * NewNode (); // Calling these funtions is an error. Severity StrToVal(const char *s, ErrorDescriptor *err) { G4cerr << "Internal error: " << __FILE__ << __LINE__ << "\n" << _POC_ "\n"; return StrToVal(s, err, 0, 0, 0); } Severity StrToVal(istream &in, ErrorDescriptor *err) { G4cerr << "Internal error: " << __FILE__ << __LINE__ << "\n" << _POC_ "\n"; return StrToVal(in, err, 0, 0, 0); } Severity STEPread(const char *s, ErrorDescriptor *err) { G4cerr << "Internal error: " << __FILE__ << __LINE__ << "\n" << _POC_ "\n"; return STEPread(s, err, 0, 0, 0); } Severity STEPread(istream &in, ErrorDescriptor *err) { G4cerr << "Internal error: " << __FILE__ << __LINE__ << "\n" << _POC_ "\n"; return STEPread(in, err, 0, 0, 0); } }; /////////////////////////////////////////////////////////////////////////// /****************************************************************** ** Class: SelectNode ** Description: this is a minimal representions for node in lists of ** STEPenumerations ******************************************************************/ class SelectNode : public STEPnode { public: SdaiSelect * node; public: // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId = 0); virtual Severity StrToVal(istream &in, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId = 0); virtual Severity STEPread(const char *s, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId = 0); virtual Severity STEPread(istream &in, ErrorDescriptor *err, const TypeDescriptor *elem_type, InstMgr *insts, int addFileId = 0); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite (SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); // CONSTRUCTORS SelectNode (SdaiSelect * s) : node (s) { } SelectNode () { } ~SelectNode () { } virtual SingleLinkNode * NewNode (); // Calling these funtions is an error. Severity StrToVal(const char *s, ErrorDescriptor *err) { G4cerr << "Internal error: " << __FILE__ << __LINE__ << "\n" << _POC_ "\n"; return StrToVal(s, err, 0, 0, 0); } Severity StrToVal(istream &in, ErrorDescriptor *err) { G4cerr << "Internal error: " << __FILE__ << __LINE__ << "\n" << _POC_ "\n"; return StrToVal(in, err, 0, 0, 0); } Severity STEPread(const char *s, ErrorDescriptor *err) { G4cerr << "Internal error: " << __FILE__ << __LINE__ << "\n" << _POC_ "\n"; return STEPread(s, err, 0, 0, 0); } Severity STEPread(istream &in, ErrorDescriptor *err) { G4cerr << "Internal error: " << __FILE__ << __LINE__ << "\n" << _POC_ "\n"; return STEPread(in, err, 0, 0, 0); } }; /////////////////////////////////////////////////////////////////////////// /****************************************************************** ** Class: StringNode ** Description: This class is for the Nodes of StringAggregates ******************************************************************/ class StringNode : public STEPnode { public: SdaiString value; public: // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err); virtual Severity StrToVal(istream &in, ErrorDescriptor *err); virtual Severity STEPread(const char *s, ErrorDescriptor *err); virtual Severity STEPread(istream &in, ErrorDescriptor *err); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite (SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); // CONSTRUCTORS StringNode(StringNode& sn); StringNode (const char * sStr); StringNode () { value = 0; } ~StringNode () { } virtual SingleLinkNode * NewNode (); }; /////////////////////////////////////////////////////////////////////////// /****************************************************************** ** Class: BinaryNode ** Description: This class is for the Nodes of BinaryAggregates ******************************************************************/ class BinaryNode : public STEPnode { public: SdaiBinary value; public: // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err); virtual Severity StrToVal(istream &in, ErrorDescriptor *err); virtual Severity STEPread(const char *s, ErrorDescriptor *err); virtual Severity STEPread(istream &in, ErrorDescriptor *err); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite (SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); // CONSTRUCTORS BinaryNode(BinaryNode& bn); BinaryNode (const char * sStr); BinaryNode () { value = 0; } ~BinaryNode () { } virtual SingleLinkNode * NewNode (); }; /****************************************************************** ** Class: EnumNode ** Description: this is a minimal representions for node in lists of ** STEPenumerations ******************************************************************/ class EnumNode : public STEPnode { public: STEPenumeration * node; public: // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err); virtual Severity StrToVal(istream &in, ErrorDescriptor *err); virtual Severity STEPread(const char *s, ErrorDescriptor *err); virtual Severity STEPread(istream &in, ErrorDescriptor *err); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite (SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); // CONSTRUCTORS EnumNode (STEPenumeration * e) : node (e) { } EnumNode () { } ~EnumNode () { } virtual SingleLinkNode * NewNode (); }; class RealNode : public STEPnode { public: SdaiReal value; // double public: // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err); virtual Severity StrToVal(istream &in, ErrorDescriptor *err); virtual Severity STEPread(const char *s, ErrorDescriptor *err); virtual Severity STEPread(istream &in, ErrorDescriptor *err); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite (SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); // CONSTRUCTORS RealNode () { value = S_REAL_NULL; } ~RealNode () { } virtual SingleLinkNode * NewNode (); }; class IntNode : public STEPnode { public: SdaiInteger value; // long int public: // INPUT virtual Severity StrToVal(const char *s, ErrorDescriptor *err); virtual Severity StrToVal(istream &in, ErrorDescriptor *err); virtual Severity STEPread(const char *s, ErrorDescriptor *err); virtual Severity STEPread(istream &in, ErrorDescriptor *err); // OUTPUT virtual const char *asStr(SCLstring & s); virtual const char *STEPwrite (SCLstring &s); virtual void STEPwrite (ostream& out =G4cout); // CONSTRUCTORS IntNode () { value = S_INT_NULL; } ~IntNode () { } virtual SingleLinkNode * NewNode (); }; /****************************************************************** ** The following classes are currently stubs ** **/ class Array : public STEPaggregate { public: int lowerBound; int upperBound; }; class Bag : public STEPaggregate { public: int min_ele; int max_ele; }; class List : public STEPaggregate { int min_ele; int max_ele; List *prev; }; class Set : public STEPaggregate { int cnt; }; #endif