00001 /* $Id: OSrLReader.cpp 3815 2010-11-03 23:46:16Z Gassmann $ */ 00017 //#define OSRLREADER_DEBUG 00018 00019 #include "OSrLReader.h" 00020 00021 00022 00023 00024 void yygetOSResult( const char *ch, OSResult* m_osresult, OSrLParserData *m_parserData, OSgLParserData *osglData) throw(ErrorClass); 00025 int osrllex_init(void** ptr_yy_globals); 00026 int osrllex_destroy (void* scanner ); 00027 void osrlset_extra (OSrLParserData* parserData , void* yyscanner ); 00028 00029 00030 OSrLReader::OSrLReader( ) { 00031 #ifdef OSRLREADER_DEBUG 00032 std::cout << "new OSrLParserData()" << std::endl; 00033 #endif 00034 m_parserData = new OSrLParserData(); 00035 #ifdef OSRLREADER_DEBUG 00036 std::cout << "new OSgLParserData()" << std::endl; 00037 #endif 00038 m_osglData = new OSgLParserData(); 00039 #ifdef OSRLREADER_DEBUG 00040 std::cout << "new OSResult()" << std::endl; 00041 #endif 00042 m_osresult = new OSResult(); 00043 // initialize the lexer and set yyextra 00044 #ifdef OSRLREADER_DEBUG 00045 std::cout << "initialize the lexer" << std::endl; 00046 #endif 00047 osrllex_init( &(m_parserData->scanner) ); 00048 osrlset_extra (m_parserData , m_parserData->scanner); 00049 #ifdef OSRLREADER_DEBUG 00050 std::cout << "done" << std::endl; 00051 #endif 00052 } 00053 00054 OSrLReader::~OSrLReader(){ 00055 // delete the osresult object 00056 #ifdef OSRLREADER_DEBUG 00057 std::cout << "delete m_osresult" << std::endl; 00058 #endif 00059 if(m_osresult != NULL) delete m_osresult; 00060 m_osresult = NULL; 00061 00062 // now delete the scanner that was initialized 00063 #ifdef OSRLREADER_DEBUG 00064 std::cout << "delete scanner" << std::endl; 00065 #endif 00066 osrllex_destroy(m_parserData->scanner ); 00067 00068 // findally delete parser data 00069 #ifdef OSRLREADER_DEBUG 00070 std::cout << "delete parser data" << std::endl; 00071 #endif 00072 if( m_parserData != NULL) delete m_parserData; 00073 m_parserData = NULL; 00074 00075 #ifdef OSRLREADER_DEBUG 00076 std::cout << "delete osglData" << std::endl; 00077 #endif 00078 if( m_osglData != NULL) delete m_osglData; 00079 m_osglData = NULL; 00080 00081 #ifdef OSRLREADER_DEBUG 00082 std::cout << "success!" << std::endl; 00083 #endif 00084 } 00085 00086 OSResult* OSrLReader::readOSrL(const std::string& posrl) throw(ErrorClass){ 00087 try{ 00088 const char *ch = posrl.c_str(); 00089 yygetOSResult( ch, m_osresult, m_parserData, m_osglData); 00090 return m_osresult; 00091 } 00092 catch(const ErrorClass& eclass){ 00093 throw ErrorClass( eclass.errormsg); 00094 } 00095 }