00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __XMLSOURCE_H__
00025 #define __XMLSOURCE_H__
00026
00027 #include "xmlLexer.h"
00028
00029 BEGIN_NAMESPACE( classad )
00030
00031 class ClassAd;
00032
00033 class ClassAdXMLParser
00034 {
00035 public:
00036 ClassAdXMLParser();
00037 ~ClassAdXMLParser();
00038 ClassAd *ParseClassAd(const std::string &buffer);
00039 ClassAd *ParseClassAd(const std::string &buffer, int &offset);
00040 ClassAd *ParseClassAd(FILE *file);
00041 ClassAd *ParseClassAd(std::istream& stream);
00042 bool ParseClassAd(const std::string &buffer, ClassAd &ad, int &offset);
00043 bool ParseClassAd(const std::string &buffer, ClassAd &ad);
00044 bool ParseClassAd(FILE *file, ClassAd &ad);
00045 bool ParseClassAd(std::istream& stream, ClassAd &ad);
00046 private:
00047
00048
00049
00050
00051 ClassAdXMLParser(const ClassAdXMLParser &parser) { return; }
00052 ClassAdXMLParser &operator=(const ClassAdXMLParser &parser) { return *this; }
00053
00054 ClassAd *ParseClassAd(void);
00055 ExprTree *ParseAttribute(std::string &attribute_name);
00056 ExprTree *ParseThing(void);
00057 ExprTree *ParseList(void);
00058 ExprTree *ParseNumberOrString(XMLLexer::TagID tag_id);
00059 ExprTree *ParseBool(void);
00060 ExprTree *ParseUndefinedOrError(XMLLexer::TagID tag_id);
00061 ExprTree *ParseAbsTime(void);
00062 ExprTree *ParseRelTime(void);
00063 ExprTree *ParseExpr(void);
00064 void SwallowEndTag(XMLLexer::TagID tag_id);
00065
00066 XMLLexer lexer;
00067 };
00068
00069 END_NAMESPACE
00070
00071 #endif//__SOURCE_H__