(file) Return to Parser.h CVS log (file) (dir) Up to [OMI] / omi / gen

  1 mike  1.1 /*
  2           **==============================================================================
  3           **
  4           ** Open Management Infrastructure (OMI)
  5           **
  6           ** Copyright (c) Microsoft Corporation
  7           ** 
  8           ** Licensed under the Apache License, Version 2.0 (the "License"); you may not 
  9           ** use this file except in compliance with the License. You may obtain a copy 
 10           ** of the License at 
 11           **
 12           **     http://www.apache.org/licenses/LICENSE-2.0 
 13           **
 14           ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15           ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
 16           ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
 17           ** MERCHANTABLITY OR NON-INFRINGEMENT. 
 18           **
 19           ** See the Apache 2 License for the specific language governing permissions 
 20           ** and limitations under the License.
 21           **
 22 mike  1.1 **==============================================================================
 23           */
 24           
 25           #ifndef _Parser_h
 26           #define _Parser_h
 27           
 28           #include <string>
 29           #include <vector>
 30           #include <map>
 31 krisbash 1.3 #include <mof/mof.h>
 32              #include <pal/strings.h>
 33 mike     1.1 
 34              #ifndef MI_CHAR_TYPE
 35              # define MI_CHAR_TYPE 1
 36              #endif
 37              
 38              #include <common.h>
 39              
 40              extern "C" void errorCallback(
 41                  const char* msg, 
 42                  const wchar_t* wmsg, 
 43                  void*);
 44              
 45              extern "C" void warningCallback(
 46                  const char* msg, 
 47                  const wchar_t* wmsg, 
 48                  void*);
 49              
 50              extern "C" void pragmaCallback(
 51                  const char* pragma, 
 52                  const char* value, 
 53                  void*);
 54 mike     1.1 
 55              extern "C" void classDeclCallback(
 56                  const MI_ClassDecl* decl, void*);
 57              
 58              extern "C" void qualifierDeclCallback(
 59                  const MI_QualifierDecl* decl, 
 60                  void*);
 61              
 62              //==============================================================================
 63              //
 64              // Parser
 65              //     This class wraps the MOF parser adding data structures for maintaining
 66              //     parsed entities and for looking up those entities.
 67              //
 68              //==============================================================================
 69              
 70              class Parser
 71              {
 72              public:
 73              
 74                  // Construct a parser that looks for MOF inclusions on these paths.
 75 mike     1.1     Parser(const std::vector<std::string>& paths, bool warnings);
 76              
 77                  // Parse the MOF file and return 0 on success.
 78                  int parse(const char* path);
 79              
 80                  // Return a pointer to the class declaration with the given name (or NULL
 81                  // if not found).
 82                  const MI_ClassDecl* findClassDecl(const std::string& name) const;
 83              
 84                  // Return an array of all classnames.
 85                  void getClassNames(std::vector<std::string>& names) const;
 86              
 87                  // Return a pointer to the qualifier declaration with the given name 
 88                  // (or NULL if not found).
 89                  const MI_QualifierDecl* findQualifierDecl(const std::string& name) const;
 90              
 91                  // Get a list of qualifier declaration names.
 92                  void getQualifierDeclNames(std::vector<std::string>& names) const;
 93              
 94                  // Destruct the parser (cleaning up whole parser tree and pointers to
 95                  // objects returned from findClassDecl() and findQualifierDecl().
 96 mike     1.1     ~Parser();
 97              
 98              private:
 99              
100                  // Hide the copy constructor.
101                  Parser(const Parser&);
102              
103                  // Hide the assignment operator.
104                  Parser& operator=(const Parser&);
105              
106                  // Callbacks invoked by the C MOF parser.
107                  friend void errorCallback(const char* msg, const wchar_t* wmsg, void*);
108                  friend void warningCallback(const char* msg, const wchar_t* wmsg, void*);
109                  friend void pragmaCallback(const char* pragma, const char* value, void*);
110                  friend void classDeclCallback(const MI_ClassDecl* decl, void*);
111                  friend void qualifierDeclCallback(const MI_QualifierDecl* decl, void*);
112              
113                  // Instance of C MOF parser.
114                  MOF_Parser* m_parser;
115              
116                  // Functor to make map string comparison case insentisive.
117 mike     1.1     struct Less
118                  {
119                      bool operator()(const std::string& x, const std::string& y) const
120                      {
121                          return Strcasecmp(x.c_str(), y.c_str()) < 0;
122                      }
123                  };
124              
125                  // Print warnings if true.
126                  bool m_warnings;
127              
128                  // Map of qualifier declaration encountered during parsing.
129                  typedef std::map<std::string, const MI_QualifierDecl*, Less> 
130                      QualifierDeclMap;
131                  typedef std::pair<std::string, const MI_QualifierDecl*> QualifierDeclPair;
132                  QualifierDeclMap m_qualifierDecls;
133              
134                  typedef std::pair<std::string, const MI_ClassDecl*> ClassDeclPair;
135                  typedef std::map<std::string, const MI_ClassDecl*, Less> ClassDeclMap;
136                  ClassDeclMap m_classDecls;
137              };
138 mike     1.1 
139              #endif /* _Parser_h */

ViewCVS 0.9.2