(file) Return to mofcxx.cpp CVS log (file) (dir) Up to [OMI] / omi / deprecated / mofcxx

  1 mike  1.1 /*
  2           **==============================================================================
  3           **
  4           ** Open Management Infrastructure (OMI)
  5           **
  6           ** Copyright (c) Microsoft Corporation
  7           **
  8 krisbash 1.3 ** 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 mike     1.1 **
 14              ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15 krisbash 1.3 ** 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 mike     1.1 **
 19 krisbash 1.3 ** See the Apache 2 License for the specific language governing permissions
 20 mike     1.1 ** and limitations under the License.
 21              **
 22              **==============================================================================
 23              */
 24              
 25              #include "mofcxx.h"
 26              #include <mof/mof.h>
 27              
 28              #ifndef _MSC_VER
 29              # include <pthread.h>
 30              #endif
 31              
 32              extern "C" void MOF_PrintClassDecl(
 33                  const MI_ClassDecl* self,
 34                  FILE* file);
 35              
 36              extern "C" void MOF_PrintInstanceDecl(
 37                  const MI_InstanceDecl* self,
 38                  FILE* file);
 39              
 40              using namespace mofcxx;
 41 mike     1.1 
 42              //==============================================================================
 43              //
 44              // Mutex
 45              //
 46              //==============================================================================
 47              
 48              #ifndef _MSC_VER
 49              static pthread_mutex_t _mutex = PTHREAD_MUTEX_INITIALIZER;
 50              #endif
 51              
 52              //==============================================================================
 53              //
 54              // Callbacks
 55              //
 56              //==============================================================================
 57              
 58              extern "C" void errorCallback(
 59 krisbash 1.3     const char* msg,
 60                  const wchar_t* wmsg,
 61 mike     1.1     void* data)
 62              {
 63                  MOFParserHandler* handler = (MOFParserHandler*)data;
 64                  handler->HandleError(msg);
 65              }
 66              
 67              extern "C" void warningCallback(
 68 krisbash 1.3     const char* msg,
 69                  const wchar_t* wmsg,
 70 mike     1.1     void* data)
 71              {
 72                  MOFParserHandler* handler = (MOFParserHandler*)data;
 73 krisbash 1.3     handler->HandleWarning(msg);
 74 mike     1.1 }
 75              
 76              extern "C" void pragmaCallback(
 77 krisbash 1.3     const char* name,
 78                  const char* value,
 79 mike     1.1     void* data)
 80              {
 81                  MOFParserHandler* handler = (MOFParserHandler*)data;
 82                  handler->HandlePragma(name, value);
 83              }
 84              
 85              extern "C" void classDeclCallback(const MI_ClassDecl* decl, void* data)
 86              {
 87                  MOFParserHandler* handler = (MOFParserHandler*)data;
 88                  handler->HandleClassDecl(decl);
 89              }
 90              
 91              extern "C" void instanceDeclCallback(const MI_InstanceDecl* decl, void* data)
 92              {
 93                  MOFParserHandler* handler = (MOFParserHandler*)data;
 94                  handler->HandleInstanceDecl(decl);
 95              }
 96              
 97 krisbash 1.3 extern "C" void qualifierDeclCallback(const MI_QualifierDecl* decl, void* data)
 98 mike     1.1 {
 99                  MOFParserHandler* handler = (MOFParserHandler*)data;
100 krisbash 1.3     handler->HandleQualifierDecl(decl);
101 mike     1.1 }
102              
103              //==============================================================================
104              //
105              // MOFParserHandler
106              //
107              //==============================================================================
108              
109              MOFCXX_BEGIN
110              
111              MOFParserHandler::~MOFParserHandler()
112              {
113              }
114              
115              void MOFParserHandler::HandleError(const char* msg)
116              {
117              }
118              
119              void MOFParserHandler::HandleWarning(const char* msg)
120              {
121              }
122 mike     1.1 
123              void MOFParserHandler::HandlePragma(const char* name, const char* value)
124              {
125              }
126              
127              void MOFParserHandler::HandleClassDecl(const MI_ClassDecl* decl)
128              {
129              }
130              
131              void MOFParserHandler::HandleInstanceDecl(const MI_InstanceDecl* decl)
132              {
133              }
134              
135              void MOFParserHandler::HandleQualifierDecl(const MI_QualifierDecl* decl)
136              {
137              }
138              
139              MOFCXX_END
140              
141              //==============================================================================
142              //
143 mike     1.1 // MOFParser
144              //
145              //==============================================================================
146              
147              MOFCXX_BEGIN
148              
149              MOFParser::MOFParser(
150                  std::vector<std::string>& paths,
151                  MOFParserHandler* handler) : m_handler(handler)
152              {
153                  char** tmp = new char*[paths.size()];
154              
155                  for (size_t i = 0; i < paths.size(); i++)
156                      tmp[i] = (char*)paths[i].c_str();
157              
158                  m_parser = MOF_Parser_New(tmp, paths.size());
159                  delete [] tmp;
160              
161 krisbash 1.3     MOF_Parser_EnableExtensions(m_parser, MI_TRUE);
162              
163 mike     1.1     MOF_Parser_SetPragmaCallback(
164 krisbash 1.3         m_parser,
165                      (MOF_PragmaCallback)pragmaCallback,
166 mike     1.1 	m_handler);
167              
168                  MOF_Parser_SetErrorCallback(
169 krisbash 1.3         m_parser,
170                      (MOF_ErrorCallback)errorCallback,
171 mike     1.1         m_handler);
172              
173                  MOF_Parser_SetWarningCallback(
174 krisbash 1.3         m_parser,
175              	(MOF_WarningCallback)warningCallback,
176 mike     1.1         m_handler);
177              
178                  MOF_Parser_SetClassDeclCallback(
179 krisbash 1.3         m_parser,
180              	(MOF_ClassDeclCallback)classDeclCallback,
181 mike     1.1         m_handler);
182              
183                  MOF_Parser_SetInstanceDeclCallback(
184 krisbash 1.3         m_parser,
185              	(MOF_InstanceDeclCallback)instanceDeclCallback,
186 mike     1.1         m_handler);
187              
188                  MOF_Parser_SetQualifierDeclCallback(
189 krisbash 1.3         m_parser,
190              	(MOF_QualifierDeclCallback)qualifierDeclCallback,
191 mike     1.1         m_handler);
192              }
193              
194              MOFParser::~MOFParser()
195              {
196                  MOF_Parser_Delete(m_parser);
197              }
198              
199              int MOFParser::Parse(const char* path)
200              {
201              #ifndef _MSC_VER
202                  /* Acquire mutex to synchronize access to global Lex/Yacc state */
203                  pthread_mutex_lock(&_mutex);
204              #endif
205              
206 krisbash 1.3     int r = -1;
207                  try
208                  {
209                      r = MOF_Parser_Parse(m_parser, path);
210                  }
211                  catch(...)
212                  {
213                     // Not really sure what to do here, but it should probably be something
214                  }
215              
216              #ifndef _MSC_VER
217                  /* Release mutex */
218                  pthread_mutex_unlock(&_mutex);
219              #endif
220              
221                  return r;
222              }
223              
224              int MOFParser::ParseString(const char* mof_string)
225              {
226              #ifndef _MSC_VER
227 krisbash 1.3     /* Acquire mutex to synchronize access to global Lex/Yacc state */
228                  pthread_mutex_lock(&_mutex);
229              #endif
230                  int r = -1;
231                  try
232                  {
233                      r = MOF_Parser_ParseString(m_parser, mof_string);
234                  }
235                  catch(...)
236                  {
237                     // Not really sure what to do here, but it should probably be something
238                  }
239 mike     1.1 
240              #ifndef _MSC_VER
241                  /* Release mutex */
242                  pthread_mutex_unlock(&_mutex);
243              #endif
244              
245                  return r;
246              }
247              
248              void MOFParser::Dump(FILE* os)
249              {
250                  return MOF_Parser_Dump(m_parser, os);
251              }
252              
253              void MOFParser::DumpClassDecl(const MI_ClassDecl* decl, FILE* os)
254              {
255                  MOF_PrintClassDecl(decl, os);
256              }
257              
258              void MOFParser::DumpInstanceDecl(const MI_InstanceDecl* decl, FILE* os)
259              {
260 mike     1.1     MOF_PrintInstanceDecl(decl, os);
261              }
262              
263              MOFCXX_END

ViewCVS 0.9.2