00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined(PARSE_NODE_H)
00024 #define PARSE_NODE_H
00025
00026 #include "BaseClasses.h"
00027
00028 class MHGroup;
00029
00030
00031 class MHParseBase {
00032 public:
00033 virtual ~MHParseBase() {}
00034 virtual MHParseNode *Parse() = 0;
00035 };
00036
00037
00038 class MHParseNode
00039 {
00040 public:
00041 enum NodeType { PNTagged, PNBool, PNInt, PNEnum, PNString, PNNull, PNSeq };
00042 protected:
00043 MHParseNode(enum NodeType nt): m_nNodeType(nt) {}
00044 public:
00045 virtual ~MHParseNode() {}
00046 enum NodeType m_nNodeType;
00047
00048 void Failure(const char *p);
00049
00050
00051
00052
00053 int GetTagNo();
00054 int GetArgCount();
00055 MHParseNode *GetArgN(int n);
00056 MHParseNode *GetNamedArg(int nTag);
00057
00058
00059 int GetSeqCount();
00060 MHParseNode *GetSeqN(int n);
00061
00062
00063 int GetIntValue();
00064
00065 int GetEnumValue();
00066
00067 bool GetBoolValue();
00068
00069 void GetStringValue(MHOctetString &str);
00070 };
00071
00072
00073 class MHParseSequence: public MHParseNode, public MHOwnPtrSequence<MHParseNode>
00074 {
00075 public:
00076 MHParseSequence(): MHParseNode(PNSeq) {}
00077 void PrintUnbracketed(int nTabs);
00078 };
00079
00080
00081
00082 class MHPTagged: public MHParseNode
00083 {
00084 public:
00085 MHPTagged(int nTag);
00086 void AddArg(MHParseNode *pNode);
00087
00088 int m_TagNo;
00089 MHParseSequence m_Args;
00090 };
00091
00092
00093 class MHPInt: public MHParseNode
00094 {
00095 public:
00096 MHPInt(int v): MHParseNode(PNInt), m_Value(v) {}
00097
00098 public:
00099 int m_Value;
00100 };
00101
00102
00103 class MHPEnum: public MHParseNode
00104 {
00105 public:
00106 MHPEnum(int v): MHParseNode(PNEnum), m_Value(v) {}
00107 public:
00108 int m_Value;
00109 };
00110
00111
00112 class MHPBool: public MHParseNode
00113 {
00114 public:
00115 MHPBool(bool v): MHParseNode(PNBool), m_Value(v) {}
00116
00117 public:
00118 bool m_Value;
00119 };
00120
00121
00122 class MHPString: public MHParseNode
00123 {
00124 public:
00125 MHPString(MHOctetString &pSrc): MHParseNode(PNString) { m_Value.Copy(pSrc); }
00126
00127 public:
00128 MHOctetString m_Value;
00129 };
00130
00131
00132 class MHPNull: public MHParseNode
00133 {
00134 public:
00135 MHPNull(): MHParseNode(PNNull) {}
00136 };
00137
00138 void PrintTabs(FILE *fd, int nTabs);
00139
00140 #endif