diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-01-12 23:49:43 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-01-12 23:49:43 (GMT) |
commit | a116aeb2cf5a84fa03f9814c3884561149029267 (patch) | |
tree | bdd7dfc15ec1e38edcc9a7532ffad03fe4f6f823 /src/uscxml/Interpreter.cpp | |
parent | 6d0622c0bb8f0e52589c82252f2cc1eb847ad9bf (diff) | |
download | uscxml-a116aeb2cf5a84fa03f9814c3884561149029267.zip uscxml-a116aeb2cf5a84fa03f9814c3884561149029267.tar.gz uscxml-a116aeb2cf5a84fa03f9814c3884561149029267.tar.bz2 |
Refactored to PIMPL pattern
Diffstat (limited to 'src/uscxml/Interpreter.cpp')
-rw-r--r-- | src/uscxml/Interpreter.cpp | 177 |
1 files changed, 82 insertions, 95 deletions
diff --git a/src/uscxml/Interpreter.cpp b/src/uscxml/Interpreter.cpp index 453bdd5..5681ff9 100644 --- a/src/uscxml/Interpreter.cpp +++ b/src/uscxml/Interpreter.cpp @@ -52,16 +52,23 @@ Interpreter* Interpreter::fromXML(const std::string& xml) { } Interpreter* Interpreter::fromURI(const std::string& uri) { - Arabica::SAX::InputSource<std::string> inputSource(uri); + URL absUrl(uri); + if (!absUrl.isAbsolute()) { + if (!absUrl.toAbsoluteCwd()) { + LOG(ERROR) << "Given URL is not absolute or does not have file schema"; + return NULL; + } + } + Arabica::SAX::InputSource<std::string> inputSource(absUrl.asString()); Interpreter* interpreter = fromInputSource(inputSource); // try to establish URI root for relative src attributes in document if (interpreter) - interpreter->_baseURI = toBaseURI(Arabica::io::URI(uri)); + interpreter->_baseURI = toBaseURI(absUrl); return interpreter; } -Arabica::io::URI Interpreter::toBaseURI(const Arabica::io::URI& uri) { +URL Interpreter::toBaseURI(const URL& uri) { std::stringstream ssBaseURI; if (uri.scheme().size() > 0) { ssBaseURI << uri.scheme() << "://"; @@ -75,30 +82,20 @@ Arabica::io::URI Interpreter::toBaseURI(const Arabica::io::URI& uri) { } if (uri.path().size() > 0) { std::string uriPath = uri.path(); - uriPath = uriPath.substr(0, uriPath.find_last_of("/\\")); + uriPath = uriPath.substr(0, uriPath.find_last_of("/\\") + 1); ssBaseURI << uriPath; } - return Arabica::io::URI(ssBaseURI.str()); + return URL(ssBaseURI.str()); } -bool Interpreter::makeAbsolute(Arabica::io::URI& uri) { - if (uri.is_absolute()) +bool Interpreter::toAbsoluteURI(URL& uri) { + if (uri.isAbsolute()) return true; - if (_baseURI.as_string().size() > 0) { - std::stringstream ssAbsoluteURI; - if (_baseURI.scheme().size() > 0) - ssAbsoluteURI << _baseURI.scheme() << "://"; - if (_baseURI.host().size() > 0) { - ssAbsoluteURI << _baseURI.host(); - if (!boost::iequals(_baseURI.port(), "0")) - ssAbsoluteURI << ":" << _baseURI.port(); - } - if (_baseURI.path().size() > 0) { - ssAbsoluteURI << _baseURI.path() << "/" << uri.path(); - } - uri = Arabica::io::URI(ssAbsoluteURI.str()); - return true; + if (_baseURI.asString().size() > 0) { + if (uri.toAbsolute(_baseURI)); + return true; + return false; } return false; } @@ -114,13 +111,13 @@ Interpreter* Interpreter::fromInputSource(Arabica::SAX::InputSource<std::string> Arabica::SAX::CatchErrorHandler<std::string> errorHandler; interpreter->setErrorHandler(errorHandler); if(!interpreter->parse(source) || !interpreter->Arabica::SAX2DOM::Parser<std::string>::getDocument().hasChildNodes()) { - LOG(INFO) << "could not parse input:"; if(errorHandler.errorsReported()) { + LOG(ERROR) << "could not parse input:"; LOG(ERROR) << errorHandler.errors() << std::endl; } else { Arabica::SAX::InputSourceResolver resolver(source, Arabica::default_string_adaptor<std::string>()); if (!resolver.resolve()) { - LOG(ERROR) << "no such file"; + LOG(ERROR) << source.getSystemId() << ": no such file"; } } return NULL; @@ -134,8 +131,6 @@ Interpreter* Interpreter::fromInputSource(Arabica::SAX::InputSource<std::string> void Interpreter::init() { _lastRunOnMainThread = 0; _thread = NULL; - _dataModel = NULL; - _invoker = NULL; _running = false; _sendQueue = new DelayedEventQueue(); _sendQueue->start(); @@ -163,18 +158,12 @@ void Interpreter::init() { } Interpreter::~Interpreter() { - std::map<std::string, IOProcessor*>::iterator ioProcessorIter = _ioProcessors.begin(); - while(ioProcessorIter != _ioProcessors.end()) { - delete ioProcessorIter->second; - ioProcessorIter++; - } if (_thread) { _running = false; _externalQueue.push(Event()); _thread->join(); delete(_thread); } - delete _dataModel; delete _sendQueue; } @@ -200,15 +189,15 @@ bool Interpreter::runOnMainThread(int fps, bool blocking) { _lastRunOnMainThread = tthread::timeStamp(); - std::map<std::string, IOProcessor*>::iterator ioProcessorIter = _ioProcessors.begin(); + std::map<std::string, IOProcessor>::iterator ioProcessorIter = _ioProcessors.begin(); while(ioProcessorIter != _ioProcessors.end()) { - ioProcessorIter->second->runOnMainThread(); + ioProcessorIter->second.runOnMainThread(); ioProcessorIter++; } - std::map<std::string, Invoker*>::iterator invokerIter = _invokers.begin(); + std::map<std::string, Invoker>::iterator invokerIter = _invokers.begin(); while(invokerIter != _invokers.end()) { - invokerIter->second->runOnMainThread(); + invokerIter->second.runOnMainThread(); invokerIter++; } @@ -229,8 +218,8 @@ void Interpreter::interpret() { _sessionId = getUUID(); if(HAS_ATTR(_scxml, "datamodel")) { - _dataModel = Factory::getDataModel(ATTR(_scxml, "datamodel"), this); - if(_dataModel == NULL) { + _dataModel = Factory::createDataModel(ATTR(_scxml, "datamodel"), this); + if(!_dataModel) { LOG(ERROR) << "No datamodel for " << ATTR(_scxml, "datamodel") << " registered"; return; } @@ -298,19 +287,19 @@ void Interpreter::initializeData(const Arabica::DOM::Node<std::string>& data) { if (HAS_ATTR(data, "expr")) { std::string value = ATTR(data, "expr"); - _dataModel->assign(ATTR(data, "id"), value); + _dataModel.assign(ATTR(data, "id"), value); } else if (HAS_ATTR(data, "src")) { Arabica::SAX::InputSourceResolver resolver(Arabica::SAX::InputSource<std::string>(ATTR(data, "src")), Arabica::default_string_adaptor<std::string>()); std::string value = std::string(std::istreambuf_iterator<char>(*resolver.resolve()), std::istreambuf_iterator<char>()); - _dataModel->assign(ATTR(data, "id"), value); + _dataModel.assign(ATTR(data, "id"), value); } else if (data.hasChildNodes()) { // search for the text node with the actual script NodeList<std::string> dataChilds = data.getChildNodes(); for (int i = 0; i < dataChilds.getLength(); i++) { if (dataChilds.item(i).getNodeType() == Node_base::TEXT_NODE) { Data value = Data(dataChilds.item(i).getNodeValue()); - _dataModel->assign(ATTR(data, "id"), value); + _dataModel.assign(ATTR(data, "id"), value); break; } } @@ -408,7 +397,7 @@ void Interpreter::mainEventLoop() { std::cout << "Received internal event " << internalEvent.name << std::endl; #endif if (_dataModel) - _dataModel->setEvent(internalEvent); + _dataModel.setEvent(internalEvent); enabledTransitions = selectTransitions(internalEvent.name); } } @@ -446,7 +435,7 @@ void Interpreter::mainEventLoop() { if (_dataModel) try { - _dataModel->setEvent(externalEvent); + _dataModel.setEvent(externalEvent); } catch (Event e) { LOG(ERROR) << "Syntax error while setting external event:" << std::endl << e << std::endl; } @@ -502,10 +491,10 @@ void Interpreter::internalDoneSend(const Arabica::DOM::Node<std::string>& state) } std::string paramValue; if (HAS_ATTR(doneChilds.item(i), "expr") && _dataModel) { - std::string location = _dataModel->evalAsString(ATTR(doneChilds.item(i), "expr")); - paramValue = _dataModel->evalAsString(location); + std::string location = _dataModel.evalAsString(ATTR(doneChilds.item(i), "expr")); + paramValue = _dataModel.evalAsString(location); } else if(HAS_ATTR(doneChilds.item(i), "location") && _dataModel) { - paramValue = _dataModel->evalAsString(ATTR(doneChilds.item(i), "location")); + paramValue = _dataModel.evalAsString(ATTR(doneChilds.item(i), "location")); } else { LOG(ERROR) << "param element is missing expr or location or no datamodel is specified"; continue; @@ -515,7 +504,7 @@ void Interpreter::internalDoneSend(const Arabica::DOM::Node<std::string>& state) if (boost::iequals(TAGNAME(doneChilds.item(i)), "content")) { if (HAS_ATTR(doneChilds.item(i), "expr")) { if (_dataModel) { - event.compound["content"] = Data(_dataModel->evalAsString(ATTR(doneChilds.item(i), "expr")), Data::VERBATIM); + event.compound["content"] = Data(_dataModel.evalAsString(ATTR(doneChilds.item(i), "expr")), Data::VERBATIM); } else { LOG(ERROR) << "content element has expr attribute but no datamodel is specified."; } @@ -539,19 +528,19 @@ void Interpreter::send(const Arabica::DOM::Node<std::string>& element) { try { // event if (HAS_ATTR(element, "eventexpr") && _dataModel) { - sendReq.name = _dataModel->evalAsString(ATTR(element, "eventexpr")); + sendReq.name = _dataModel.evalAsString(ATTR(element, "eventexpr")); } else if (HAS_ATTR(element, "event")) { sendReq.name = ATTR(element, "event"); } // target if (HAS_ATTR(element, "targetexpr") && _dataModel) { - sendReq.target = _dataModel->evalAsString(ATTR(element, "targetexpr")); + sendReq.target = _dataModel.evalAsString(ATTR(element, "targetexpr")); } else if (HAS_ATTR(element, "target")) { sendReq.target = ATTR(element, "target"); } // type if (HAS_ATTR(element, "typeexpr") && _dataModel) { - sendReq.type = _dataModel->evalAsString(ATTR(element, "typeexpr")); + sendReq.type = _dataModel.evalAsString(ATTR(element, "typeexpr")); } else if (HAS_ATTR(element, "type")) { sendReq.type = ATTR(element, "type"); } else { @@ -559,7 +548,7 @@ void Interpreter::send(const Arabica::DOM::Node<std::string>& element) { } // id if (HAS_ATTR(element, "idlocation") && _dataModel) { - sendReq.sendid = _dataModel->evalAsString(ATTR(element, "idlocation")); + sendReq.sendid = _dataModel.evalAsString(ATTR(element, "idlocation")); } else if (HAS_ATTR(element, "id")) { sendReq.sendid = ATTR(element, "id"); } else { @@ -588,7 +577,7 @@ void Interpreter::send(const Arabica::DOM::Node<std::string>& element) { std::string delay; sendReq.delayMs = 0; if (HAS_ATTR(element, "delayexpr") && _dataModel) { - delay = _dataModel->evalAsString(ATTR(element, "delayexpr")); + delay = _dataModel.evalAsString(ATTR(element, "delayexpr")); } else if (HAS_ATTR(element, "delay")) { delay = ATTR(element, "delay"); } @@ -610,7 +599,7 @@ void Interpreter::send(const Arabica::DOM::Node<std::string>& element) { if (HAS_ATTR(element, "namelist")) { std::vector<std::string> names = tokenizeIdRefs(ATTR(element, "namelist")); for (int i = 0; i < names.size(); i++) { - sendReq.namelist[names[i]] = _dataModel->evalAsString(names[i]); + sendReq.namelist[names[i]] = _dataModel.evalAsString(names[i]); } } @@ -623,9 +612,9 @@ void Interpreter::send(const Arabica::DOM::Node<std::string>& element) { } std::string paramValue; if (HAS_ATTR(params[i], "expr") && _dataModel) { - paramValue = _dataModel->evalAsString(ATTR(params[i], "expr")); + paramValue = _dataModel.evalAsString(ATTR(params[i], "expr")); } else if(HAS_ATTR(params[i], "location") && _dataModel) { - paramValue = _dataModel->evalAsString(ATTR(params[i], "location")); + paramValue = _dataModel.evalAsString(ATTR(params[i], "location")); } else { LOG(ERROR) << "param element is missing expr or location or no datamodel is specified"; continue; @@ -640,7 +629,7 @@ void Interpreter::send(const Arabica::DOM::Node<std::string>& element) { if (contents.size() > 0) { if (HAS_ATTR(contents[0], "expr")) { if (_dataModel) { - sendReq.content = _dataModel->evalAsString(ATTR(contents[0], "expr")); + sendReq.content = _dataModel.evalAsString(ATTR(contents[0], "expr")); } else { LOG(ERROR) << "content element has expr attribute but no datamodel is specified."; } @@ -672,8 +661,8 @@ void Interpreter::delayedSend(void* userdata, std::string eventName) { if (boost::iequals(sendReq.target, "#_parent")) { // send to parent scxml session - if (INSTANCE->_invoker != NULL) { - INSTANCE->_invoker->sendToParent(sendReq); + if (INSTANCE->_invoker) { + INSTANCE->_invoker.sendToParent(sendReq); } else { LOG(ERROR) << "Can not send to parent, we were not invoked" << std::endl; } @@ -681,16 +670,16 @@ void Interpreter::delayedSend(void* userdata, std::string eventName) { // send to invoker std::string invokeId = sendReq.target.substr(2, sendReq.target.length() - 2); if (INSTANCE->_invokers.find(invokeId) != INSTANCE->_invokers.end()) { - INSTANCE->_invokers[invokeId]->send(sendReq); + INSTANCE->_invokers[invokeId].send(sendReq); } else { LOG(ERROR) << "Can not send to invoked component '" << invokeId << "', no such invokeId" << std::endl; } } else if (sendReq.target.length() == 0) { INSTANCE->receive(sendReq); } else { - IOProcessor* ioProc = INSTANCE->getIOProcessor(sendReq.type); - if (ioProc != NULL) { - ioProc->send(sendReq); + IOProcessor ioProc = INSTANCE->getIOProcessor(sendReq.type); + if (ioProc) { + ioProc.send(sendReq); } } assert(INSTANCE->_sendIds.find(sendReq.sendid) != INSTANCE->_sendIds.end()); @@ -704,7 +693,7 @@ void Interpreter::invoke(const Arabica::DOM::Node<std::string>& element) { try { // type if (HAS_ATTR(element, "typeexpr") && _dataModel) { - invokeReq.type = _dataModel->evalAsString(ATTR(element, "typeexpr")); + invokeReq.type = _dataModel.evalAsString(ATTR(element, "typeexpr")); } else if (HAS_ATTR(element, "type")) { invokeReq.type = ATTR(element, "type"); } else { @@ -714,22 +703,22 @@ void Interpreter::invoke(const Arabica::DOM::Node<std::string>& element) { // src std::string source; if (HAS_ATTR(element, "srcexpr") && _dataModel) { - source = _dataModel->evalAsString(ATTR(element, "srcexpr")); + source = _dataModel.evalAsString(ATTR(element, "srcexpr")); } else if (HAS_ATTR(element, "src")) { source = ATTR(element, "src"); } if (source.length() > 0) { - Arabica::io::URI srcURI(source); - if (!makeAbsolute(srcURI)) { + URL srcURI(source); + if (!toAbsoluteURI(srcURI)) { LOG(ERROR) << "invoke element has relative src URI with no baseURI set."; return; } - invokeReq.src = srcURI.as_string(); + invokeReq.src = srcURI.asString(); } // id if (HAS_ATTR(element, "idlocation") && _dataModel) { - invokeReq.invokeid = _dataModel->evalAsString(ATTR(element, "idlocation")); + invokeReq.invokeid = _dataModel.evalAsString(ATTR(element, "idlocation")); } else if (HAS_ATTR(element, "id")) { invokeReq.invokeid = ATTR(element, "id"); } else { @@ -760,12 +749,12 @@ void Interpreter::invoke(const Arabica::DOM::Node<std::string>& element) { std::string paramValue; if (HAS_ATTR(params[i], "expr")) { if (_dataModel) { - paramValue = _dataModel->evalAsString(ATTR(params[i], "expr")); + paramValue = _dataModel.evalAsString(ATTR(params[i], "expr")); } else { paramValue = ATTR(params[i], "expr"); } } else if(HAS_ATTR(params[i], "location") && _dataModel) { - paramValue = _dataModel->evalAsString(ATTR(params[i], "location")); + paramValue = _dataModel.evalAsString(ATTR(params[i], "location")); } else { LOG(ERROR) << "param element is missing expr or location or no datamodel is specified"; continue; @@ -783,11 +772,11 @@ void Interpreter::invoke(const Arabica::DOM::Node<std::string>& element) { invokeReq.content = contents[0].getNodeValue(); } - Invoker* invoker = Factory::getInvoker(invokeReq.type, this); - if (invoker != NULL) { + Invoker invoker(Factory::createInvoker(invokeReq.type, this)); + if (invoker) { _invokers[invokeReq.invokeid] = invoker; LOG(INFO) << "Added invoker " << invokeReq.type << " at " << invokeReq.invokeid; - invoker->invoke(invokeReq); + invoker.invoke(invokeReq); } else { LOG(ERROR) << "No invoker known for type " << invokeReq.type; } @@ -800,7 +789,7 @@ void Interpreter::invoke(const Arabica::DOM::Node<std::string>& element) { void Interpreter::cancelInvoke(const Arabica::DOM::Node<std::string>& element) { std::string invokeId; if (HAS_ATTR(element, "idlocation") && _dataModel) { - invokeId = _dataModel->evalAsString(ATTR(element, "idlocation")); + invokeId = _dataModel.evalAsString(ATTR(element, "idlocation")); } else if (HAS_ATTR(element, "id")) { invokeId = ATTR(element, "id"); } else { @@ -808,7 +797,6 @@ void Interpreter::cancelInvoke(const Arabica::DOM::Node<std::string>& element) { } if (_invokers.find(invokeId) != _invokers.end()) { LOG(INFO) << "Removed invoker at " << invokeId; - delete (_invokers[invokeId]); _invokers.erase(invokeId); } else { LOG(ERROR) << "Cannot cancel invoke for id " << invokeId << ": no soch invokation"; @@ -930,7 +918,7 @@ LOOP: bool Interpreter::hasConditionMatch(const Arabica::DOM::Node<std::string>& conditional) { try { if (_dataModel && HAS_ATTR(conditional, "cond")) - return _dataModel->evalAsBool(ATTR(conditional, "cond")); + return _dataModel.evalAsBool(ATTR(conditional, "cond")); } catch (Event e) { LOG(ERROR) << "Syntax error in cond attribute of " << TAGNAME(conditional) << " element:" << std::endl << e << std::endl; return false; @@ -1073,25 +1061,25 @@ ELSIF_ELEM_MATCH: std::string array = ATTR(content, "array"); std::string item = ATTR(content, "item"); std::string index = (HAS_ATTR(content, "index") ? ATTR(content, "index") : ""); - uint32_t iterations = _dataModel->getLength(array); - _dataModel->pushContext(); // copy old and enter new context + uint32_t iterations = _dataModel.getLength(array); + _dataModel.pushContext(); // copy old and enter new context for (uint32_t iteration = 0; iteration < iterations; iteration++) { { // assign array element to item std::stringstream ss; ss << array << "[" << iteration << "]"; - _dataModel->assign(item, ss.str()); + _dataModel.assign(item, ss.str()); } if (index.length() > 0) { // assign iteration element to index std::stringstream ss; ss << iteration; - _dataModel->assign(index,ss.str()); + _dataModel.assign(index,ss.str()); } if (content.hasChildNodes()) executeContent(content.getChildNodes()); } - _dataModel->popContext(); // leave stacked context + _dataModel.popContext(); // leave stacked context } else { LOG(ERROR) << "Expected array and item attributes with foreach element!" << std::endl; } @@ -1102,7 +1090,7 @@ ELSIF_ELEM_MATCH: if (logElem.hasAttribute("expr")) { if (_dataModel) { try { - std::cout << _dataModel->evalAsString(logElem.getAttribute("expr")) << std::endl; + std::cout << _dataModel.evalAsString(logElem.getAttribute("expr")) << std::endl; } catch (Event e) { LOG(ERROR) << "Syntax error in expr attribute of log element:" << std::endl << e << std::endl; } @@ -1114,7 +1102,7 @@ ELSIF_ELEM_MATCH: // --- ASSIGN -------------------------- if (_dataModel && HAS_ATTR(content, "location") && HAS_ATTR(content, "expr")) { try { - _dataModel->assign(ATTR(content, "location"), ATTR(content, "expr")); + _dataModel.assign(ATTR(content, "location"), ATTR(content, "expr")); } catch (Event e) { LOG(ERROR) << "Syntax error in attributes of assign element:" << std::endl << e << std::endl; } @@ -1124,24 +1112,23 @@ ELSIF_ELEM_MATCH: if (_dataModel) { std::string location = (HAS_ATTR(content, "location") ? ATTR(content, "location") : ""); std::string schema = (HAS_ATTR(content, "schema") ? ATTR(content, "schema") : ""); - _dataModel->validate(location, schema); + _dataModel.validate(location, schema); } } else if (boost::iequals(TAGNAME(content), "script")) { // --- SCRIPT -------------------------- if (_dataModel) { if (HAS_ATTR(content, "src")) { - Arabica::io::URI url(ATTR(content, "src")); - if (!makeAbsolute(url)) { + URL scriptUrl(ATTR(content, "src")); + if (!toAbsoluteURI(scriptUrl)) { LOG(ERROR) << "script element has relative URI " << ATTR(content, "src") << " with no base URI set for interpreter"; return; } std::stringstream srcContent; - URL scriptUrl(url.as_string()); srcContent << scriptUrl; try { - _dataModel->eval(srcContent.str()); + _dataModel.eval(srcContent.str()); } catch (Event e) { LOG(ERROR) << "Syntax error while executing script element from '" << ATTR(content, "src") << "':" << std::endl << e << std::endl; } @@ -1150,7 +1137,7 @@ ELSIF_ELEM_MATCH: // search for the text node with the actual script if (content.getFirstChild().getNodeType() == Node_base::TEXT_NODE) { try { - _dataModel->eval(content.getFirstChild().getNodeValue()); + _dataModel.eval(content.getFirstChild().getNodeValue()); } catch (Event e) { LOG(ERROR) << "Syntax error while executing script element" << std::endl << e << std::endl; } @@ -1166,7 +1153,7 @@ ELSIF_ELEM_MATCH: std::string sendId; try { if (HAS_ATTR(content, "sendidexpr")) { - sendId = _dataModel->evalAsString(ATTR(content, "sendidexpr")); + sendId = _dataModel.evalAsString(ATTR(content, "sendidexpr")); } else if(HAS_ATTR(content, "sendid")) { sendId = ATTR(content, "sendid"); } else { @@ -1806,12 +1793,12 @@ bool Interpreter::isCompound(const Arabica::DOM::Node<std::string>& state) { } void Interpreter::setupIOProcessors() { - std::map<std::string, IOProcessor*>::iterator ioProcIter = Factory::getInstance()->_ioProcessors.begin(); + std::map<std::string, IOProcessorImpl*>::iterator ioProcIter = Factory::getInstance()->_ioProcessors.begin(); while(ioProcIter != Factory::getInstance()->_ioProcessors.end()) { - _ioProcessors[ioProcIter->first] = Factory::getIOProcessor(ioProcIter->first, this); + _ioProcessors[ioProcIter->first] = Factory::createIOProcessor(ioProcIter->first, this); if (_dataModel) { try { - _dataModel->registerIOProcessor(ioProcIter->first, _ioProcessors[ioProcIter->first]); + _dataModel.registerIOProcessor(ioProcIter->first, _ioProcessors[ioProcIter->first]); } catch (Event e) { LOG(ERROR) << "Syntax error when setting _ioprocessors:" << std::endl << e << std::endl; } @@ -1822,10 +1809,10 @@ void Interpreter::setupIOProcessors() { } } -IOProcessor* Interpreter::getIOProcessor(const std::string& type) { +IOProcessor Interpreter::getIOProcessor(const std::string& type) { if (_ioProcessors.find(type) == _ioProcessors.end()) { LOG(ERROR) << "No ioProcessor known for type " << type; - return NULL; + return IOProcessor(); } return _ioProcessors[type]; } @@ -1842,7 +1829,7 @@ bool Interpreter::validate() { bool validationErrors = false; if (!_document) { - LOG(ERROR) << "Document " << _baseURI.as_string() << " was not parsed successfully" << std::endl; + LOG(ERROR) << "Document " << _baseURI.asString() << " was not parsed successfully" << std::endl; return false; } |