main.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:32k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * main.h
  3.  *
  4.  * PWLib application header file for asnparser
  5.  *
  6.  * ASN.1 compiler to produce C++ classes.
  7.  *
  8.  * Copyright (c) 1997-1999 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is ASN Parser.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions of this code were written with the assisance of funding from
  25.  * Vovida Networks, Inc. http://www.vovida.com.
  26.  *
  27.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  28.  * All Rights Reserved.
  29.  *
  30.  * Contributor(s): ______________________________________.
  31.  *
  32.  * $Log: main.h,v $
  33.  * Revision 1.11  2000/03/21 21:23:24  robertj
  34.  * Added option to rename imported module names, allows include filename matching.
  35.  *
  36.  * Revision 1.10  1999/09/18 04:17:40  robertj
  37.  * Added generation of C++ inlines for some  functions.
  38.  * Optimised CreateObject() switch statements, collapsing common cases.
  39.  *
  40.  * Revision 1.9  1999/08/09 13:02:36  robertj
  41.  * Added ASN compiler #defines for backward support of pre GCC 2.9 compilers.
  42.  * Added ASN compiler #defines to reduce its memory footprint.
  43.  * Added ASN compiler code generation of assignment operators for string classes.
  44.  *
  45.  * Revision 1.8  1999/07/22 06:48:56  robertj
  46.  * Added comparison operation to base ASN classes and compiled ASN code.
  47.  * Added support for ANY type in ASN parser.
  48.  *
  49.  * Revision 1.7  1999/06/30 08:57:20  robertj
  50.  * Fixed bug in encodeing sequence of constrained primitive type. Constraint not set.
  51.  * Fixed bug in not emitting namespace use clause.
  52.  * Added "normalisation" of separate sequence of <base type> to be single class.
  53.  *
  54.  * Revision 1.6  1999/06/09 06:58:09  robertj
  55.  * Adjusted heading comments.
  56.  *
  57.  * Revision 1.5  1999/06/07 01:56:26  robertj
  58.  * Added header comment on license.
  59.  *
  60.  */
  61. #ifndef _MAIN_H
  62. #define _MAIN_H
  63. extern unsigned lineNumber;
  64. extern PString  fileName;
  65. extern FILE * yyin;
  66. extern int yyparse();
  67. void yyerror(char * str);
  68. /////////////////////////////////////////
  69. //
  70. //  standard error output from parser
  71. //
  72. enum StdErrorType { Warning, Fatal };
  73. class StdError {
  74.   public:
  75.     StdError(StdErrorType ne) : e(ne) { }
  76.     //StdError(StdErrorType ne, unsigned ln) : e(ne), l(ln) { }
  77.     friend ostream & operator<<(ostream & out, const StdError & e);
  78.   protected:
  79.     StdErrorType e;
  80.     //unsigned     l;
  81. };
  82. /////////////////////////////////////////
  83. //
  84. //  intermediate structures from parser
  85. //
  86. class NamedNumber : public PObject
  87. {
  88.     PCLASSINFO(NamedNumber, PObject);
  89.   public:
  90.     NamedNumber(PString * nam);
  91.     NamedNumber(PString * nam, int num);
  92.     NamedNumber(PString * nam, const PString & ref);
  93.     void PrintOn(ostream &) const;
  94.     void SetAutoNumber(const NamedNumber & prev);
  95.     const PString & GetName() const { return name; }
  96.     int GetNumber() const { return number; }
  97.   protected:
  98.     PString name;
  99.     PString reference;
  100.     int number;
  101.     BOOL autonumber;
  102. };
  103. PLIST(NamedNumberList, NamedNumber);
  104. // Types
  105. class TypeBase;
  106. PLIST(TypesList, TypeBase);
  107. PSORTED_LIST(SortedTypesList, TypeBase);
  108. class Tag : public PObject
  109. {
  110.     PCLASSINFO(Tag, PObject);
  111.   public:
  112.     enum Type {
  113.       Universal,
  114.       Application,
  115.       ContextSpecific,
  116.       Private
  117.     };
  118.     enum UniversalTags {
  119.       IllegalUniversalTag,
  120.       UniversalBoolean,
  121.       UniversalInteger,
  122.       UniversalBitString,
  123.       UniversalOctetString,
  124.       UniversalNull,
  125.       UniversalObjectId,
  126.       UniversalObjectDescriptor,
  127.       UniversalExternalType,
  128.       UniversalReal,
  129.       UniversalEnumeration,
  130.       UniversalEmbeddedPDV,
  131.       UniversalSequence = 16,
  132.       UniversalSet,
  133.       UniversalNumericString,
  134.       UniversalPrintableString,
  135.       UniversalTeletexString,
  136.       UniversalVideotexString,
  137.       UniversalIA5String,
  138.       UniversalUTCTime,
  139.       UniversalGeneralisedTime,
  140.       UniversalGraphicString,
  141.       UniversalVisibleString,
  142.       UniversalGeneralString,
  143.       UniversalUniversalString,
  144.       UniversalBMPString = 30
  145.     };
  146.     enum Mode {
  147.       Implicit,
  148.       Explicit,
  149.       Automatic
  150.     };
  151.     Tag(unsigned tagNum);
  152.     void PrintOn(ostream &) const;
  153.     Type type;
  154.     unsigned number;
  155.     Mode mode;
  156.     static const char * classNames[];
  157.     static const char * modeNames[];
  158. };
  159. class ConstraintElementBase;
  160. PLIST(ConstraintElementList, ConstraintElementBase);
  161. class Constraint : public PObject
  162. {
  163.     PCLASSINFO(Constraint, PObject);
  164.   public:
  165.     Constraint(ConstraintElementBase * elmt);
  166.     Constraint(ConstraintElementList * std, BOOL extend, ConstraintElementList * ext);
  167.     void PrintOn(ostream &) const;
  168.     BOOL IsExtendable() const { return extendable; }
  169.     void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  170.     BOOL ReferencesType(const TypeBase & type);
  171.   protected:
  172.     ConstraintElementList standard;
  173.     BOOL                  extendable;
  174.     ConstraintElementList extensions;
  175. };
  176. PLIST(ConstraintList, Constraint);
  177. class ConstraintElementBase : public PObject
  178. {
  179.     PCLASSINFO(ConstraintElementBase, PObject);
  180.   public:
  181.     ConstraintElementBase();
  182.     void SetExclusions(ConstraintElementBase * excl) { exclusions = excl; }
  183.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  184.     virtual BOOL ReferencesType(const TypeBase & type);
  185.   protected:
  186.     ConstraintElementBase * exclusions;
  187. };
  188. class ConstrainAllConstraintElement : public ConstraintElementBase
  189. {
  190.     PCLASSINFO(ConstrainAllConstraintElement, ConstraintElementBase);
  191.   public:
  192.     ConstrainAllConstraintElement(ConstraintElementBase * excl);
  193. };
  194. class ElementListConstraintElement : public ConstraintElementBase
  195. {
  196.     PCLASSINFO(ElementListConstraintElement, ConstraintElementBase);
  197.   public:
  198.     ElementListConstraintElement(ConstraintElementList * list);
  199.     void PrintOn(ostream &) const;
  200.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  201.     virtual BOOL ReferencesType(const TypeBase & type);
  202.   protected:
  203.     ConstraintElementList elements;
  204. };
  205. class ValueBase;
  206. class SingleValueConstraintElement : public ConstraintElementBase
  207. {
  208.     PCLASSINFO(SingleValueConstraintElement, ConstraintElementBase);
  209.   public:
  210.     SingleValueConstraintElement(ValueBase * val);
  211.     ~SingleValueConstraintElement();
  212.     void PrintOn(ostream &) const;
  213.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  214.   protected:
  215.     ValueBase * value;
  216. };
  217. class ValueRangeConstraintElement : public ConstraintElementBase
  218. {
  219.     PCLASSINFO(ValueRangeConstraintElement, ConstraintElementBase);
  220.   public:
  221.     ValueRangeConstraintElement(ValueBase * lowerBound, ValueBase * upperBound);
  222.     ~ValueRangeConstraintElement();
  223.     void PrintOn(ostream &) const;
  224.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  225.   protected:
  226.     ValueBase * lower;
  227.     ValueBase * upper;
  228. };
  229. class TypeBase;
  230. class SubTypeConstraintElement : public ConstraintElementBase
  231. {
  232.     PCLASSINFO(SubTypeConstraintElement, ConstraintElementBase);
  233.   public:
  234.     SubTypeConstraintElement(TypeBase * typ);
  235.     ~SubTypeConstraintElement();
  236.     void PrintOn(ostream &) const;
  237.     void GenerateCplusplus(const PString &, ostream &, ostream &);
  238.     virtual BOOL ReferencesType(const TypeBase & type);
  239.   protected:
  240.     TypeBase * subtype;
  241. };
  242. class NestedConstraintConstraintElement : public ConstraintElementBase
  243. {
  244.     PCLASSINFO(NestedConstraintConstraintElement, ConstraintElementBase);
  245.   public:
  246.     NestedConstraintConstraintElement(Constraint * con);
  247.     ~NestedConstraintConstraintElement();
  248.     virtual BOOL ReferencesType(const TypeBase & type);
  249.   protected:
  250.     Constraint * constraint;
  251. };
  252. class SizeConstraintElement : public NestedConstraintConstraintElement
  253. {
  254.     PCLASSINFO(SizeConstraintElement, NestedConstraintConstraintElement);
  255.   public:
  256.     SizeConstraintElement(Constraint * constraint);
  257.     void PrintOn(ostream &) const;
  258.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  259. };
  260. class FromConstraintElement : public NestedConstraintConstraintElement
  261. {
  262.     PCLASSINFO(FromConstraintElement, NestedConstraintConstraintElement);
  263.   public:
  264.     FromConstraintElement(Constraint * constraint);
  265.     void PrintOn(ostream &) const;
  266.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  267. };
  268. class WithComponentConstraintElement : public NestedConstraintConstraintElement
  269. {
  270.     PCLASSINFO(WithComponentConstraintElement, NestedConstraintConstraintElement);
  271.   public:
  272.     WithComponentConstraintElement(PString * name, Constraint * constraint, int presence);
  273.     void PrintOn(ostream &) const;
  274.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  275.     enum {
  276.       Present,
  277.       Absent,
  278.       Optional,
  279.       Default
  280.     };
  281.   protected:
  282.     PString name;
  283.     int     presence;
  284. };
  285. class InnerTypeConstraintElement : public ElementListConstraintElement
  286. {
  287.     PCLASSINFO(InnerTypeConstraintElement, ElementListConstraintElement);
  288.   public:
  289.     InnerTypeConstraintElement(ConstraintElementList * list, BOOL partial);
  290.     void PrintOn(ostream &) const;
  291.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  292.   protected:
  293.     BOOL partial;
  294. };
  295. class UserDefinedConstraintElement : public ConstraintElementBase
  296. {
  297.     PCLASSINFO(UserDefinedConstraintElement, ConstraintElementBase);
  298.   public:
  299.     UserDefinedConstraintElement(TypesList * types);
  300.     void PrintOn(ostream &) const;
  301.     virtual void GenerateCplusplus(const PString & fn, ostream & hdr, ostream & cxx);
  302.   protected:
  303.     TypesList types;
  304. };
  305. class TypeBase : public PObject
  306. {
  307.     PCLASSINFO(TypeBase, PObject);
  308.   public:
  309.     Comparison Compare(const PObject & obj) const;
  310.     void PrintOn(ostream &) const;
  311.     virtual int GetIdentifierTokenContext() const;
  312.     virtual int GetBraceTokenContext() const;
  313.     const PString & GetName() const { return name; }
  314.     void SetName(PString * name);
  315.     PString GetIdentifier() const { return identifier; }
  316.     void SetTag(Tag::Type cls, unsigned num, Tag::Mode mode);
  317.     const Tag & GetTag() const { return tag; }
  318.     BOOL HasNonStandardTag() const { return tag != defaultTag; }
  319.     void SetParameters(PStringList * list);
  320.     void AddConstraint(Constraint * constraint) { constraints.Append(constraint); }
  321.     BOOL HasConstraints() const { return constraints.GetSize() > 0; }
  322.     void MoveConstraints(TypeBase * from);
  323.     BOOL HasParameters() const { return !parameters.IsEmpty(); }
  324.     BOOL IsOptional() const { return isOptional; }
  325.     void SetOptional() { isOptional = TRUE; }
  326.     void SetDefaultValue(ValueBase * value) { defaultValue = value; }
  327.     const PString & GetTemplatePrefix() const { return templatePrefix; }
  328.     const PString & GetClassNameString() const { return classNameString; }
  329.     virtual void AdjustIdentifier();
  330.     virtual void FlattenUsedTypes();
  331.     virtual TypeBase * FlattenThisType(const TypeBase & parent);
  332.     virtual BOOL IsChoice() const;
  333.     virtual BOOL IsParameterizedType() const;
  334.     virtual BOOL IsPrimitiveType() const;
  335.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  336.     virtual void GenerateForwardDecls(ostream & hdr);
  337.     virtual void GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType);
  338.     virtual const char * GetAncestorClass() const = 0;
  339.     virtual PString GetTypeName() const;
  340.     virtual BOOL CanReferenceType() const;
  341.     virtual BOOL ReferencesType(const TypeBase & type);
  342.     virtual void SetImportPrefix(const PString &);
  343.     virtual BOOL IsParameterisedImport() const;
  344.     BOOL IsGenerated() const { return isGenerated; }
  345.     void BeginGenerateCplusplus(ostream & hdr, ostream & cxx);
  346.     void EndGenerateCplusplus(ostream & hdr, ostream & cxx);
  347.     void GenerateCplusplusConstructor(ostream & hdr, ostream & cxx);
  348.     void GenerateCplusplusConstraints(const PString & prefix, ostream & hdr, ostream & cxx);
  349.   protected:
  350.     TypeBase(unsigned tagNum);
  351.     TypeBase(TypeBase * copy);
  352.     void PrintStart(ostream &) const;
  353.     void PrintFinish(ostream &) const;
  354.     PString        name;
  355.     PString        identifier;
  356.     Tag            tag;
  357.     Tag            defaultTag;
  358.     ConstraintList constraints;
  359.     BOOL           isOptional;
  360.     ValueBase    * defaultValue;
  361.     BOOL           isGenerated;
  362.     PStringList    parameters;
  363.     PString        templatePrefix;
  364.     PString        classNameString;
  365. };
  366. class DefinedType : public TypeBase
  367. {
  368.     PCLASSINFO(DefinedType, TypeBase);
  369.   public:
  370.     DefinedType(PString * name, BOOL parameter);
  371.     DefinedType(TypeBase * refType, TypeBase * bType);
  372.     DefinedType(TypeBase * refType, const PString & name);
  373.     DefinedType(TypeBase * refType, const TypeBase & parent);
  374.     void PrintOn(ostream &) const;
  375.     virtual BOOL IsChoice() const;
  376.     virtual BOOL IsParameterizedType() const;
  377.     virtual void GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType);
  378.     virtual const char * GetAncestorClass() const;
  379.     virtual PString GetTypeName() const;
  380.     virtual BOOL CanReferenceType() const;
  381.     virtual BOOL ReferencesType(const TypeBase & type);
  382.   protected:
  383.     void ConstructFromType(TypeBase * refType, const PString & name);
  384.     PString referenceName;
  385.     TypeBase * baseType;
  386.     BOOL unresolved;
  387. };
  388. class ParameterizedType : public DefinedType
  389. {
  390.     PCLASSINFO(ParameterizedType, DefinedType);
  391.   public:
  392.     ParameterizedType(PString * name, TypesList * args);
  393.     void PrintOn(ostream &) const;
  394.     virtual BOOL IsParameterizedType() const;
  395.     virtual PString GetTypeName() const;
  396.     virtual BOOL ReferencesType(const TypeBase & type);
  397.   protected:
  398.     TypesList arguments;
  399. };
  400. class SelectionType : public TypeBase
  401. {
  402.     PCLASSINFO(SelectionType, TypeBase);
  403.   public:
  404.     SelectionType(PString * name, TypeBase * base);
  405.     ~SelectionType();
  406.     void PrintOn(ostream &) const;
  407.     virtual void FlattenUsedTypes();
  408.     virtual TypeBase * FlattenThisType(const TypeBase & parent);
  409.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  410.     virtual const char * GetAncestorClass() const;
  411.     virtual BOOL CanReferenceType() const;
  412.     virtual BOOL ReferencesType(const TypeBase & type);
  413.   protected:
  414.     PString selection;
  415.     TypeBase * baseType;
  416. };
  417. class BooleanType : public TypeBase
  418. {
  419.     PCLASSINFO(BooleanType, TypeBase);
  420.   public:
  421.     BooleanType();
  422.     virtual void GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType);
  423.     virtual const char * GetAncestorClass() const;
  424. };
  425. class IntegerType : public TypeBase
  426. {
  427.     PCLASSINFO(IntegerType, TypeBase);
  428.   public:
  429.     IntegerType();
  430.     IntegerType(NamedNumberList *);
  431.     virtual void GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType);
  432.     virtual const char * GetAncestorClass() const;
  433.   protected:
  434.     NamedNumberList allowedValues;
  435. };
  436. class EnumeratedType : public TypeBase
  437. {
  438.     PCLASSINFO(EnumeratedType, TypeBase);
  439.   public:
  440.     EnumeratedType(NamedNumberList * enums, BOOL extend, NamedNumberList * ext);
  441.     void PrintOn(ostream &) const;
  442.     virtual TypeBase * FlattenThisType(const TypeBase & parent);
  443.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  444.     virtual void GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType);
  445.     virtual const char * GetAncestorClass() const;
  446.   protected:
  447.     NamedNumberList enumerations;
  448.     PINDEX numEnums;
  449.     BOOL extendable;
  450. };
  451. class RealType : public TypeBase
  452. {
  453.     PCLASSINFO(RealType, TypeBase);
  454.   public:
  455.     RealType();
  456.     virtual const char * GetAncestorClass() const;
  457. };
  458. class BitStringType : public TypeBase
  459. {
  460.     PCLASSINFO(BitStringType, TypeBase);
  461.   public:
  462.     BitStringType();
  463.     BitStringType(NamedNumberList *);
  464.     virtual int GetIdentifierTokenContext() const;
  465.     virtual int GetBraceTokenContext() const;
  466.     virtual const char * GetAncestorClass() const;
  467.   protected:
  468.     NamedNumberList allowedBits;
  469. };
  470. class OctetStringType : public TypeBase
  471. {
  472.     PCLASSINFO(OctetStringType, TypeBase);
  473.   public:
  474.     OctetStringType();
  475.     virtual void GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType);
  476.     virtual const char * GetAncestorClass() const;
  477. };
  478. class NullType : public TypeBase
  479. {
  480.     PCLASSINFO(NullType, TypeBase);
  481.   public:
  482.     NullType();
  483.     virtual const char * GetAncestorClass() const;
  484. };
  485. class SequenceType : public TypeBase
  486. {
  487.     PCLASSINFO(SequenceType, TypeBase);
  488.     void PrintOn(ostream &) const;
  489.   public:
  490.     SequenceType(TypesList * std,
  491.                  BOOL extendable,
  492.                  TypesList * extensions,
  493.                  unsigned tagNum = Tag::UniversalSequence);
  494.     virtual void FlattenUsedTypes();
  495.     virtual TypeBase * FlattenThisType(const TypeBase & parent);
  496.     virtual BOOL IsPrimitiveType() const;
  497.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  498.     virtual const char * GetAncestorClass() const;
  499.     virtual BOOL CanReferenceType() const;
  500.     virtual BOOL ReferencesType(const TypeBase & type);
  501.   protected:
  502.     TypesList fields;
  503.     PINDEX numFields;
  504.     BOOL extendable;
  505. };
  506. class SequenceOfType : public TypeBase
  507. {
  508.     PCLASSINFO(SequenceOfType, TypeBase);
  509.   public:
  510.     SequenceOfType(TypeBase * base, Constraint * constraint, unsigned tag = Tag::UniversalSequence);
  511.     ~SequenceOfType();
  512.     void PrintOn(ostream &) const;
  513.     virtual void FlattenUsedTypes();
  514.     virtual TypeBase * FlattenThisType(const TypeBase & parent);
  515.     virtual BOOL IsPrimitiveType() const;
  516.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  517.     virtual void GenerateForwardDecls(ostream & hdr);
  518.     virtual const char * GetAncestorClass() const;
  519.     virtual BOOL CanReferenceType() const;
  520.     virtual BOOL ReferencesType(const TypeBase & type);
  521.   protected:
  522.     TypeBase * baseType;
  523. };
  524. class SetType : public SequenceType
  525. {
  526.     PCLASSINFO(SetType, SequenceType);
  527.   public:
  528.     SetType();
  529.     SetType(SequenceType * seq);
  530.     virtual const char * GetAncestorClass() const;
  531. };
  532. class SetOfType : public SequenceOfType
  533. {
  534.     PCLASSINFO(SetOfType, SequenceOfType);
  535.   public:
  536.     SetOfType(TypeBase * base, Constraint * constraint);
  537. };
  538. class ChoiceType : public SequenceType
  539. {
  540.     PCLASSINFO(ChoiceType, SequenceType);
  541.   public:
  542.     ChoiceType(TypesList * std = NULL,
  543.                BOOL extendable = FALSE,
  544.                TypesList * extensions = NULL);
  545.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  546.     virtual void GenerateForwardDecls(ostream & hdr);
  547.     virtual BOOL IsPrimitiveType() const;
  548.     virtual BOOL IsChoice() const;
  549.     virtual const char * GetAncestorClass() const;
  550.     virtual BOOL ReferencesType(const TypeBase & type);
  551. };
  552. class EmbeddedPDVType : public TypeBase
  553. {
  554.     PCLASSINFO(EmbeddedPDVType, TypeBase);
  555.   public:
  556.     EmbeddedPDVType();
  557.     virtual const char * GetAncestorClass() const;
  558. };
  559. class ExternalType : public TypeBase
  560. {
  561.     PCLASSINFO(ExternalType, TypeBase);
  562.   public:
  563.     ExternalType();
  564.     virtual const char * GetAncestorClass() const;
  565. };
  566. class AnyType : public TypeBase
  567. {
  568.     PCLASSINFO(AnyType, TypeBase);
  569.   public:
  570.     AnyType(PString * ident);
  571.     void PrintOn(ostream & strm) const;
  572.     virtual const char * GetAncestorClass() const;
  573.   protected:
  574.     PString identifier;
  575. };
  576. class StringTypeBase : public TypeBase
  577. {
  578.     PCLASSINFO(StringTypeBase, TypeBase);
  579.   public:
  580.     StringTypeBase(int tag);
  581.     virtual int GetBraceTokenContext() const;
  582.     virtual void GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType);
  583. };
  584. class BMPStringType : public StringTypeBase
  585. {
  586.     PCLASSINFO(BMPStringType, StringTypeBase);
  587.   public:
  588.     BMPStringType();
  589.     virtual const char * GetAncestorClass() const;
  590. };
  591. class GeneralStringType : public StringTypeBase
  592. {
  593.     PCLASSINFO(GeneralStringType, StringTypeBase);
  594.   public:
  595.     GeneralStringType();
  596.     virtual const char * GetAncestorClass() const;
  597. };
  598. class GraphicStringType : public StringTypeBase
  599. {
  600.     PCLASSINFO(GraphicStringType, StringTypeBase);
  601.   public:
  602.     GraphicStringType();
  603.     virtual const char * GetAncestorClass() const;
  604. };
  605. class IA5StringType : public StringTypeBase
  606. {
  607.     PCLASSINFO(IA5StringType, StringTypeBase);
  608.   public:
  609.     IA5StringType();
  610.     virtual const char * GetAncestorClass() const;
  611. };
  612. class ISO646StringType : public StringTypeBase
  613. {
  614.     PCLASSINFO(ISO646StringType, StringTypeBase);
  615.   public:
  616.     ISO646StringType();
  617.     virtual const char * GetAncestorClass() const;
  618. };
  619. class NumericStringType : public StringTypeBase
  620. {
  621.     PCLASSINFO(NumericStringType, StringTypeBase);
  622.   public:
  623.     NumericStringType();
  624.     virtual const char * GetAncestorClass() const;
  625. };
  626. class PrintableStringType : public StringTypeBase
  627. {
  628.     PCLASSINFO(PrintableStringType, StringTypeBase);
  629.   public:
  630.     PrintableStringType();
  631.     virtual const char * GetAncestorClass() const;
  632. };
  633. class TeletexStringType : public StringTypeBase
  634. {
  635.     PCLASSINFO(TeletexStringType, StringTypeBase);
  636.   public:
  637.     TeletexStringType();
  638.     virtual const char * GetAncestorClass() const;
  639. };
  640. class T61StringType : public StringTypeBase
  641. {
  642.     PCLASSINFO(T61StringType, StringTypeBase);
  643.   public:
  644.     T61StringType();
  645.     virtual const char * GetAncestorClass() const;
  646. };
  647. class UniversalStringType : public StringTypeBase
  648. {
  649.     PCLASSINFO(UniversalStringType, StringTypeBase);
  650.   public:
  651.     UniversalStringType();
  652.     virtual const char * GetAncestorClass() const;
  653. };
  654. class VideotexStringType : public StringTypeBase
  655. {
  656.     PCLASSINFO(VideotexStringType, StringTypeBase);
  657.   public:
  658.     VideotexStringType();
  659.     virtual const char * GetAncestorClass() const;
  660. };
  661. class VisibleStringType : public StringTypeBase
  662. {
  663.     PCLASSINFO(VisibleStringType, StringTypeBase);
  664.   public:
  665.     VisibleStringType();
  666.     virtual const char * GetAncestorClass() const;
  667. };
  668. class UnrestrictedCharacterStringType : public StringTypeBase
  669. {
  670.     PCLASSINFO(UnrestrictedCharacterStringType, StringTypeBase);
  671.   public:
  672.     UnrestrictedCharacterStringType();
  673.     virtual const char * GetAncestorClass() const;
  674. };
  675. class GeneralizedTimeType : public TypeBase
  676. {
  677.     PCLASSINFO(GeneralizedTimeType, TypeBase);
  678.   public:
  679.     GeneralizedTimeType();
  680.     virtual const char * GetAncestorClass() const;
  681. };
  682. class UTCTimeType : public TypeBase
  683. {
  684.     PCLASSINFO(UTCTimeType, TypeBase);
  685.   public:
  686.     UTCTimeType();
  687.     virtual const char * GetAncestorClass() const;
  688. };
  689. class ObjectDescriptorType : public TypeBase
  690. {
  691.     PCLASSINFO(ObjectDescriptorType, TypeBase);
  692.   public:
  693.     ObjectDescriptorType();
  694.     virtual const char * GetAncestorClass() const;
  695. };
  696. class ObjectIdentifierType : public TypeBase
  697. {
  698.     PCLASSINFO(ObjectIdentifierType, TypeBase);
  699.   public:
  700.     ObjectIdentifierType();
  701.     virtual int GetIdentifierTokenContext() const;
  702.     virtual int GetBraceTokenContext() const;
  703.     virtual const char * GetAncestorClass() const;
  704. };
  705. class ObjectClassFieldType : public TypeBase
  706. {
  707.     PCLASSINFO(ObjectClassFieldType, TypeBase);
  708.   public:
  709.     ObjectClassFieldType(PString * objclass, PString * field);
  710.     virtual const char * GetAncestorClass() const;
  711.     void PrintOn(ostream &) const;
  712.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  713.     virtual BOOL CanReferenceType() const;
  714.     virtual BOOL ReferencesType(const TypeBase & type);
  715.   protected:
  716.     PString asnObjectClassName;
  717.     PString asnObjectClassField;
  718. };
  719. class ImportedType : public TypeBase
  720. {
  721.     PCLASSINFO(ImportedType, TypeBase);
  722.   public:
  723.     ImportedType(PString * name, BOOL parameterised);
  724.     virtual const char * GetAncestorClass() const;
  725.     virtual void AdjustIdentifier();
  726.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  727.     virtual void SetImportPrefix(const PString &);
  728.     virtual BOOL IsParameterisedImport() const;
  729.   protected:
  730.     PString modulePrefix;
  731.     BOOL    parameterised;
  732. };
  733. class SearchType : public TypeBase
  734. {
  735.     PCLASSINFO(SearchType, TypeBase);
  736.   public:
  737.     SearchType(const PString & name);
  738.     virtual const char * GetAncestorClass() const;
  739. };
  740. // Values
  741. class ValueBase : public PObject
  742. {
  743.     PCLASSINFO(ValueBase, PObject);
  744.   public:
  745.     void SetValueName(PString * name);
  746.     const PString & GetName() const { return valueName; }
  747.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  748.   protected:
  749.     void PrintBase(ostream &) const;
  750.     PString valueName;
  751. };
  752. PLIST(ValuesList, ValueBase);
  753. class DefinedValue : public ValueBase
  754. {
  755.     PCLASSINFO(DefinedValue, ValueBase);
  756.   public:
  757.     DefinedValue(PString * name);
  758.     void PrintOn(ostream &) const;
  759.     const PString & GetReference() const { return referenceName; }
  760.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  761.   protected:
  762.     PString referenceName;
  763.     ValueBase * actualValue;
  764.     BOOL unresolved;
  765. };
  766. class BooleanValue : public ValueBase
  767. {
  768.     PCLASSINFO(BooleanValue, ValueBase);
  769.   public:
  770.     BooleanValue(BOOL newVal);
  771.     void PrintOn(ostream &) const;
  772.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  773.   protected:
  774.     BOOL value;
  775. };
  776. class IntegerValue : public ValueBase
  777. {
  778.     PCLASSINFO(IntegerValue, ValueBase);
  779.   public:
  780.     IntegerValue(PInt64 newVal);
  781.     void PrintOn(ostream &) const;
  782.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  783.     operator PInt64() const { return value; }
  784.     operator long() const { return (long)value; }
  785.   protected:
  786.     PInt64 value;
  787. };
  788. class RealValue : public ValueBase
  789. {
  790.     PCLASSINFO(RealValue, ValueBase);
  791.   public:
  792.     RealValue(double newVal);
  793.   protected:
  794.     double value;
  795. };
  796. class OctetStringValue : public ValueBase
  797. {
  798.     PCLASSINFO(OctetStringValue, ValueBase);
  799.   public:
  800.     OctetStringValue() { }
  801.     OctetStringValue(PString * newVal);
  802.   protected:
  803.     PBYTEArray value;
  804. };
  805. class BitStringValue : public ValueBase
  806. {
  807.     PCLASSINFO(BitStringValue, ValueBase);
  808.   public:
  809.     BitStringValue() { }
  810.     BitStringValue(PString * newVal);
  811.     BitStringValue(PStringList * newVal);
  812.   protected:
  813.     PBYTEArray value;
  814. };
  815. class NullValue : public ValueBase
  816. {
  817.     PCLASSINFO(NullValue, ValueBase);
  818. };
  819. class CharacterValue : public ValueBase
  820. {
  821.     PCLASSINFO(CharacterValue, ValueBase);
  822.   public:
  823.     CharacterValue(BYTE c);
  824.     CharacterValue(BYTE t1, BYTE t2);
  825.     CharacterValue(BYTE q1, BYTE q2, BYTE q3, BYTE q4);
  826.     void PrintOn(ostream &) const;
  827.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  828.   protected:
  829.     unsigned value;
  830. };
  831. class CharacterStringValue : public ValueBase
  832. {
  833.     PCLASSINFO(CharacterStringValue, ValueBase);
  834.   public:
  835.     CharacterStringValue() { }
  836.     CharacterStringValue(PString * newVal);
  837.     CharacterStringValue(PStringList * newVal);
  838.     void PrintOn(ostream &) const;
  839.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  840.   protected:
  841.     PString value;
  842. };
  843. class ObjectIdentifierValue : public ValueBase
  844. {
  845.     PCLASSINFO(ObjectIdentifierValue, ValueBase);
  846.   public:
  847.     ObjectIdentifierValue(PString * newVal);
  848.     ObjectIdentifierValue(PStringList * newVal);
  849.     void PrintOn(ostream &) const;
  850.   protected:
  851.     PStringList value;
  852. };
  853. class MinValue : public ValueBase
  854. {
  855.     PCLASSINFO(MinValue, ValueBase);
  856.   public:
  857.     void PrintOn(ostream &) const;
  858.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  859. };
  860. class MaxValue : public ValueBase
  861. {
  862.     PCLASSINFO(MaxValue, ValueBase);
  863.   public:
  864.     void PrintOn(ostream &) const;
  865.     virtual void GenerateCplusplus(ostream & hdr, ostream & cxx);
  866. };
  867. class SequenceValue : public ValueBase
  868. {
  869.     PCLASSINFO(SequenceValue, ValueBase);
  870.   public:
  871.     SequenceValue(ValuesList * list = NULL);
  872.     void PrintOn(ostream &) const;
  873.   protected:
  874.     ValuesList values;
  875. };
  876. class MibBase : public PObject
  877. {
  878.     PCLASSINFO(MibBase, PObject);
  879.   public:
  880.     MibBase(PString * name, PString * descr, PString * refer, ValueBase * val);
  881.     virtual ~MibBase();
  882.   protected:
  883.     PString name;
  884.     PString description;
  885.     PString reference;
  886.     ValueBase * value;
  887. };
  888. PLIST(MibList, MibBase);
  889. class MibObject : public MibBase
  890. {
  891.     PCLASSINFO(MibObject, MibBase);
  892.   public:
  893.     enum Access {
  894.       read_only,
  895.       read_write,
  896.       write_only,
  897.       not_accessible,
  898.     };
  899.     enum Status {
  900.       mandatory,
  901.       optional,
  902.       obsolete,
  903.       deprecated
  904.     };
  905.     MibObject(PString * name, TypeBase * type, Access acc, Status stat,
  906.               PString * descr, PString * refer, PStringList * idx,
  907.               ValueBase * defVal,
  908.               ValueBase * setVal);
  909.     ~MibObject();
  910.     void PrintOn(ostream &) const;
  911.   protected:
  912.     TypeBase * type;
  913.     Access access;
  914.     Status status;
  915.     PStringList index;
  916.     ValueBase * defaultValue;
  917. };
  918. class MibTrap : public MibBase
  919. {
  920.     PCLASSINFO(MibTrap, MibBase);
  921.   public:
  922.     MibTrap(PString * nam, ValueBase * ent, ValuesList * var,
  923.             PString * descr, PString * refer, ValueBase * val);
  924.     ~MibTrap();
  925.     void PrintOn(ostream &) const;
  926.   protected:
  927.     ValueBase * enterprise;
  928.     ValuesList variables;
  929. };
  930. class ImportModule : public PObject
  931. {
  932.     PCLASSINFO(ImportModule, PObject);
  933.   public:
  934.     ImportModule(PString * name, TypesList * syms);
  935.     void PrintOn(ostream &) const;
  936.     void GenerateCplusplus(ostream & hdr, ostream & cxx);
  937.   protected:
  938.     PString   fullModuleName;
  939.     PString   shortModuleName;
  940.     TypesList symbols;
  941. };
  942. PLIST(ImportsList, ImportModule);
  943. class ModuleDefinition : public PObject
  944. {
  945.     PCLASSINFO(ModuleDefinition, PObject);
  946.   public:
  947.     ModuleDefinition(PString * name, PStringList * id, Tag::Mode defTagMode);
  948.     void PrintOn(ostream &) const;
  949.     Tag::Mode GetDefaultTagMode() const { return defaultTagMode; }
  950.     void SetExportAll();
  951.     void SetExports(TypesList * syms);
  952.     void AddImport(ImportModule * mod)  { imports.Append(mod); }
  953.     void AddType(TypeBase * type)       { types.Append(type); }
  954.     void AddValue(ValueBase * val)      { values.Append(val); }
  955.     void AddMIB(MibBase * mib)          { mibs.Append(mib); }
  956.     void AppendType(TypeBase * type);
  957.     TypeBase * FindType(const PString & name);
  958.     const ValuesList & GetValues() const { return values; }
  959.     const PString & GetModuleName() const { return moduleName; }
  960.     const PString & GetPrefix()     const { return classNamePrefix; }
  961.     PString GetImportModuleName(const PString & moduleName);
  962.     int GetIndentLevel() const { return indentLevel; }
  963.     void SetIndentLevel(int delta) { indentLevel += delta; }
  964.     BOOL UsingInlines() const { return usingInlines; }
  965.     void GenerateCplusplus(const PFilePath & path,
  966.                            const PString & modName,
  967.                            unsigned numFiles,
  968.                            BOOL useNamespaces,
  969.                            BOOL useInlines,
  970.                            BOOL verbose);
  971.   protected:
  972.     PString         moduleName;
  973.     PString         classNamePrefix;
  974.     BOOL            separateClassFiles;
  975.     PStringList     definitiveId;
  976.     Tag::Mode       defaultTagMode;
  977.     TypesList       exports;
  978.     BOOL            exportAll;
  979.     ImportsList     imports;
  980.     PStringToString importNames;
  981.     TypesList       types;
  982.     SortedTypesList sortedTypes;
  983.     ValuesList      values;
  984.     MibList         mibs;
  985.     int             indentLevel;
  986.     BOOL            usingInlines;
  987. };
  988. extern ModuleDefinition * Module;
  989. #endif