home *** CD-ROM | disk | FTP | other *** search
/ ftptest.leeds.ac.uk / 2015.02.ftptest.leeds.ac.uk.tar / ftptest.leeds.ac.uk / bionet / CAE-GROUP / SCL-WIN3x / SCL.EXE / ATTRIBUT.H < prev    next >
C/C++ Source or Header  |  1994-08-06  |  6KB  |  203 lines

  1. #ifndef ATTRIBUTE_H
  2. #define    ATTRIBUTE_H    1
  3.  
  4. /*
  5. * NIST STEP Core Class Library
  6. * clstepcore/STEPattribute.h
  7. * February, 1994
  8. * K. C. Morris
  9. * David Sauder
  10.  
  11. * Development of this software was funded by the United States Government,
  12. * and is not subject to copyright.
  13. */
  14.  
  15. /* $Id: STEPattribute.h,v 2.0.1.3 1994/04/05 16:36:14 sauderd Exp $ */
  16.  
  17.  
  18.  
  19. #include <stdio.h>
  20. #include <errordesc.h>
  21. #include <baseType.h>
  22.  
  23. typedef unsigned short BOOLEAN;
  24. typedef double real;  
  25.  
  26. class InstMgr;
  27. class STEPentity;
  28. class STEPenumeration;
  29. class STEPaggregate;
  30. class SCLundefined;
  31. class SdaiSelect;
  32. class SdaiBinary;
  33.  
  34. class TypeDescriptor;
  35. class AttrDescriptor;
  36. class EntityDescriptor;
  37.  
  38. #include <strstream.h>
  39. #include <ExpDict.h>
  40.  
  41. #define s_String    char *
  42.  
  43. extern int SetErrOnNull(const char *attrValue, ErrorDescriptor *error);
  44. ////////////////////
  45. ////////////////////
  46.  
  47. extern Severity 
  48. CheckRemainingInput(istream &in, ErrorDescriptor *err, 
  49.             const char *typeName, // used in error message
  50.             const char *tokenList); // e.g. ",)"
  51.  
  52. extern STEPentity *
  53. ReadEntityRef(istream &in, ErrorDescriptor *err, char *tokenList, 
  54.           InstMgr * instances, int addFileId);
  55.  
  56. extern STEPentity *
  57. ReadEntityRef(const char * s, ErrorDescriptor *err, char *tokenList, 
  58.           InstMgr * instances, int addFileId);
  59.  
  60. extern Severity 
  61. EntityValidLevel(STEPentity *se, 
  62.          const TypeDescriptor *ed, // entity type that entity se needs 
  63.                        // to match. (this must be an
  64.                        // EntityDescriptor)
  65.          ErrorDescriptor *err);
  66.  
  67. extern Severity 
  68. EntityValidLevel(const char *attrValue, // string contain entity ref
  69.          const TypeDescriptor *ed, // entity type that entity in 
  70.                        // attrValue (if it exists) needs 
  71.                        // to match. (this must be an
  72.                        // EntityDescriptor)
  73.          ErrorDescriptor *err, InstMgr *im, int clearError);
  74.  
  75. ////////////////////
  76. ////////////////////
  77.  
  78. extern STEPentity *STEPread_reference (const char * s, ErrorDescriptor *err, 
  79.                        InstMgr * instances, int addFileId);
  80. ////////////////////
  81.  
  82. extern int   QuoteInString(istream& in);
  83.  
  84. extern void  AppendChar(char c, int& index, char *&s, int& sSize);
  85.  
  86. extern void 
  87. PushPastString (istream& in, SCLstring &s, ErrorDescriptor *err);
  88.  
  89. extern void 
  90. PushPastImbedAggr (istream& in, SCLstring &s, ErrorDescriptor *err);
  91.  
  92. extern void 
  93. PushPastAggr1Dim(istream& in, SCLstring &s, ErrorDescriptor *err);
  94.  
  95. //extern  Severity ValidateEntityType(STEPentity *se, 
  96. //                    const AttrDescriptor *ad, 
  97. //                    ErrorDescriptor *error);
  98.  
  99. class STEPattribute {
  100.  
  101.     friend ostream &operator<< ( ostream&, STEPattribute& );
  102.     friend class STEPentity;
  103.     
  104.   protected:
  105.     ErrorDescriptor _error;
  106.     unsigned int _derive : 1;
  107.     int Derive (unsigned int n =1)  { return _derive =n; }
  108.  
  109.   public:
  110.     const AttrDescriptor * AttrDescriptor;
  111.  
  112.     // You know which of these to use based on the return value of
  113.     // NonRefType() - see below. BASE_TYPE is defined in baseType.h
  114.     // This variable points to an appropriate member variable in the entity
  115.     // class in the generated schema class library (the entity class is 
  116.     // inherited from STEPentity)
  117.     union  {
  118.     SdaiInteger *i;        // INTEGER_TYPE // SdaiInteger is a long int
  119.     class SdaiString *S;    // STRING_TYPE
  120.     class SdaiBinary *b;    // BINARY_TYPE
  121.     SdaiReal *r;       // REAL_TYPE and NUMBER_TYPE // SdaiReal is a double
  122.     class STEPentity* *c;    // ENTITY_TYPE
  123.     STEPaggregate *a;    // AGGREGATE_TYPE
  124.     STEPenumeration *e;    // ENUM_TYPE, BOOLEAN_TYPE, and LOGICAL_TYPE
  125.     class SdaiSelect *sh;    // SELECT_TYPE
  126.     SCLundefined *u;    // UNKNOWN_TYPE
  127.  
  128.     void *p;
  129.     
  130.     } ptr;
  131.  
  132.   protected:
  133.     char SkipBadAttr(istream& in, char *StopChars);
  134.     void AddErrorInfo();
  135.  
  136.   public:
  137.  
  138. ///////////// Read, Write, Assign attr value
  139.  
  140.     Severity StrToVal(const char *s, InstMgr *instances =0, 
  141.               int addFileId =0);
  142.     Severity STEPread(istream& in = cin, InstMgr *instances =0, 
  143.               int addFileId =0);
  144.  
  145.     const char * asStr(SCLstring &) const; // return the attr value as a string
  146.     void STEPwrite(ostream& out = cout);
  147.  
  148.     BOOLEAN ShallowCopy(STEPattribute *sa);
  149.  
  150.     Severity set_null();
  151.  
  152. ////////////// Return info on attr
  153.  
  154.     BOOLEAN    Nullable() const; // may this attribute be null?
  155.     BOOLEAN    is_null () const; // is this attribute null?
  156.     int     IsDerived () const  {  return _derive;  }
  157.  
  158.     const s_String     Name() const;
  159.     const s_String    TypeName() const;
  160.     const BASE_TYPE    Type() const;
  161.     const BASE_TYPE    NonRefType() const;
  162.     const BASE_TYPE    BaseType() const;
  163.  
  164.     const TypeDescriptor   *ReferentType() const;
  165.  
  166.     ErrorDescriptor &Error()    { return _error; }
  167.     void ClearErrorMsg()    { _error.ClearErrorMsg(); } 
  168.  
  169.     Severity ValidLevel (const char *attrValue, ErrorDescriptor *error, 
  170.                  InstMgr *im, int clearError = 1);
  171.   public:
  172.  
  173. ////////////////// Constructors
  174.  
  175.    STEPattribute (const STEPattribute& a);
  176.    STEPattribute ()  {};
  177.  
  178.    ~STEPattribute () {}; 
  179.  
  180.        //  INTEGER
  181.    STEPattribute (const class AttrDescriptor& d, SdaiInteger *p);
  182.        //  BINARY
  183.    STEPattribute (const class AttrDescriptor& d, SdaiBinary *p);
  184.        //  STRING
  185.    STEPattribute (const class AttrDescriptor& d, SdaiString *p);
  186.        //  REAL & NUMBER
  187.    STEPattribute (const class AttrDescriptor& d, SdaiReal *p);
  188.        //  ENTITY
  189.    STEPattribute (const class AttrDescriptor& d, STEPentity* *p);
  190.        //  AGGREGATE
  191.    STEPattribute (const class AttrDescriptor& d, STEPaggregate *p);
  192.        //  ENUMERATION  and Logical
  193.    STEPattribute (const class AttrDescriptor& d, STEPenumeration *p);
  194.        //  SELECT
  195.    STEPattribute (const class AttrDescriptor& d, class SdaiSelect *p);
  196.        //  UNDEFINED
  197.    STEPattribute (const class AttrDescriptor& d, SCLundefined *p);
  198.  
  199.   friend int operator == (STEPattribute &a1, STEPattribute &a2);
  200. };
  201.  
  202. #endif
  203.