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