diff options
Diffstat (limited to 'src/uscxml/debug')
-rw-r--r-- | src/uscxml/debug/Breakpoint.cpp | 4 | ||||
-rw-r--r-- | src/uscxml/debug/Breakpoint.h | 4 | ||||
-rw-r--r-- | src/uscxml/debug/DebugSession.cpp | 142 | ||||
-rw-r--r-- | src/uscxml/debug/DebugSession.h | 12 | ||||
-rw-r--r-- | src/uscxml/debug/Debugger.cpp | 84 | ||||
-rw-r--r-- | src/uscxml/debug/Debugger.h | 58 | ||||
-rw-r--r-- | src/uscxml/debug/DebuggerServlet.cpp | 6 | ||||
-rw-r--r-- | src/uscxml/debug/DebuggerServlet.h | 8 | ||||
-rw-r--r-- | src/uscxml/debug/InterpreterIssue.cpp | 4 |
9 files changed, 161 insertions, 161 deletions
diff --git a/src/uscxml/debug/Breakpoint.cpp b/src/uscxml/debug/Breakpoint.cpp index 3287075..7b9d5c9 100644 --- a/src/uscxml/debug/Breakpoint.cpp +++ b/src/uscxml/debug/Breakpoint.cpp @@ -244,7 +244,7 @@ bool Breakpoint::matches(Interpreter interpreter, const Breakpoint& other) const return InterpreterImpl::isMember(other.element, nodes); } #endif - + if(transSourceId.length() > 0 && transSourceId != other.transSourceId) { return false; } @@ -255,7 +255,7 @@ bool Breakpoint::matches(Interpreter interpreter, const Breakpoint& other) const if (condition.length() > 0) { try { - interpreter.getImpl()->isTrue(condition); + interpreter.getImpl()->isTrue(condition); } catch (...) { return false; } diff --git a/src/uscxml/debug/Breakpoint.h b/src/uscxml/debug/Breakpoint.h index 3809663..feaf221 100644 --- a/src/uscxml/debug/Breakpoint.h +++ b/src/uscxml/debug/Breakpoint.h @@ -28,7 +28,7 @@ // forward declare namespace XERCESC_NS { - class DOMElement; +class DOMElement; } namespace uscxml { @@ -76,7 +76,7 @@ public: Subject subject; Action action; - const XERCESC_NS::DOMElement* element = NULL; + const XERCESC_NS::DOMElement* element = NULL; std::string invokeId; std::string invokeType; diff --git a/src/uscxml/debug/DebugSession.cpp b/src/uscxml/debug/DebugSession.cpp index 60dcdfb..4d64443 100644 --- a/src/uscxml/debug/DebugSession.cpp +++ b/src/uscxml/debug/DebugSession.cpp @@ -74,21 +74,21 @@ void DebugSession::checkBreakpoints(const std::list<Breakpoint> qualifiedBreakpo void DebugSession::breakExecution(Data replyData) { std::lock_guard<std::recursive_mutex> lock(_mutex); - std::list<XERCESC_NS::DOMElement*> configuration = _interpreter.getConfiguration(); - for (auto state : configuration) { - if (HAS_ATTR(state, "id")) { - replyData.compound["activeStates"].array.push_back(Data(ATTR(state, "id"), Data::VERBATIM)); - if (isAtomic(state)) { - replyData.compound["basicStates"].array.push_back(Data(ATTR(state, "id"), Data::VERBATIM)); - } - } - } + std::list<XERCESC_NS::DOMElement*> configuration = _interpreter.getConfiguration(); + for (auto state : configuration) { + if (HAS_ATTR(state, "id")) { + replyData.compound["activeStates"].array.push_back(Data(ATTR(state, "id"), Data::VERBATIM)); + if (isAtomic(state)) { + replyData.compound["basicStates"].array.push_back(Data(ATTR(state, "id"), Data::VERBATIM)); + } + } + } replyData.compound["replyType"] = Data("breakpoint", Data::VERBATIM); _debugger->pushData(shared_from_this(), replyData); - - // wait for resume from the client - _resumeCond.wait(_mutex); + + // wait for resume from the client + _resumeCond.wait(_mutex); } Data DebugSession::debugPrepare(const Data& data) { @@ -104,23 +104,23 @@ Data DebugSession::debugPrepare(const Data& data) { _isAttached = false; - try { - if (data.hasKey("xml")) { - _interpreter = Interpreter::fromXML(data.at("xml").atom, (data.hasKey("url") ? data.at("url").atom : "")); - } else if (data.hasKey("url")) { - _interpreter = Interpreter::fromURL(data.at("url").atom); - } else { - _interpreter = Interpreter(); - } - } catch(ErrorEvent e) { - std::cerr << e; - } catch(...) {} - + try { + if (data.hasKey("xml")) { + _interpreter = Interpreter::fromXML(data.at("xml").atom, (data.hasKey("url") ? data.at("url").atom : "")); + } else if (data.hasKey("url")) { + _interpreter = Interpreter::fromURL(data.at("url").atom); + } else { + _interpreter = Interpreter(); + } + } catch(ErrorEvent e) { + std::cerr << e; + } catch(...) {} + if (_interpreter) { // register ourself as a monitor _interpreter.addMonitor(_debugger); _debugger->attachSession(_interpreter.getImpl().get(), shared_from_this()); - + replyData.compound["status"] = Data("success", Data::VERBATIM); } else { replyData.compound["status"] = Data("failure", Data::VERBATIM); @@ -143,8 +143,8 @@ Data DebugSession::debugAttach(const Data& data) { bool interpreterFound = false; // find interpreter for sessionid - std::map<std::string, std::weak_ptr<InterpreterImpl> > instances = InterpreterImpl::getInstances(); - for (auto weakInstance : instances) { + std::map<std::string, std::weak_ptr<InterpreterImpl> > instances = InterpreterImpl::getInstances(); + for (auto weakInstance : instances) { std::shared_ptr<InterpreterImpl> instance = weakInstance.second.lock(); if (instance && instance->getSessionId() == interpreterId) { @@ -185,8 +185,8 @@ Data DebugSession::debugStart(const Data& data) { replyData.compound["reason"] = Data("No interpreter attached or loaded", Data::VERBATIM); replyData.compound["status"] = Data("failure", Data::VERBATIM); } else { - _isRunning = true; - _interpreterThread = new std::thread(DebugSession::run, this); + _isRunning = true; + _interpreterThread = new std::thread(DebugSession::run, this); replyData.compound["status"] = Data("success", Data::VERBATIM); } @@ -194,28 +194,28 @@ Data DebugSession::debugStart(const Data& data) { } void DebugSession::run(void* instance) { - DebugSession* INSTANCE = (DebugSession*)instance; - + DebugSession* INSTANCE = (DebugSession*)instance; + #ifdef APPLE - std::string threadName; - threadName += "uscxml::"; - threadName += (INSTANCE->_interpreter.getImpl()->_name.size() > 0 ? INSTANCE->_interpreter.getImpl()->_name : "anon"); - threadName += ".debug"; - - pthread_setname_np(threadName.c_str()); + std::string threadName; + threadName += "uscxml::"; + threadName += (INSTANCE->_interpreter.getImpl()->_name.size() > 0 ? INSTANCE->_interpreter.getImpl()->_name : "anon"); + threadName += ".debug"; + + pthread_setname_np(threadName.c_str()); #endif - - InterpreterState state = USCXML_UNDEF; - while(state != USCXML_FINISHED && INSTANCE->_isRunning) { - state = INSTANCE->_interpreter.step(); - - // if (!INSTANCE->_isStarted) { - // // we have been cancelled - // INSTANCE->_isActive = false; - // return; - // } - } - LOG(DEBUG) << "done"; + + InterpreterState state = USCXML_UNDEF; + while(state != USCXML_FINISHED && INSTANCE->_isRunning) { + state = INSTANCE->_interpreter.step(); + + // if (!INSTANCE->_isStarted) { + // // we have been cancelled + // INSTANCE->_isActive = false; + // return; + // } + } + LOG(DEBUG) << "done"; } Data DebugSession::debugStop(const Data& data) { @@ -226,11 +226,11 @@ Data DebugSession::debugStop(const Data& data) { _debugger->detachSession(_interpreter.getImpl().get()); } - if (_isRunning && _interpreterThread != NULL) { - _isRunning = false; - _interpreterThread->join(); - delete(_interpreterThread); - } + if (_isRunning && _interpreterThread != NULL) { + _isRunning = false; + _interpreterThread->join(); + delete(_interpreterThread); + } // unblock _resumeCond.notify_all(); @@ -252,11 +252,11 @@ Data DebugSession::debugStep(const Data& data) { Data replyData; if (_interpreter) { // register ourself as a monitor - if (!_isRunning) { - _isRunning = true; - _interpreterThread = new std::thread(DebugSession::run, this); + if (!_isRunning) { + _isRunning = true; + _interpreterThread = new std::thread(DebugSession::run, this); - } + } replyData.compound["status"] = Data("success", Data::VERBATIM); } else { @@ -294,19 +294,19 @@ Data DebugSession::skipToBreakPoint(const Data& data) { std::lock_guard<std::recursive_mutex> lock(_mutex); _skipTo = Breakpoint(data); - Data replyData; - - if (_interpreter) { - // register ourself as a monitor - if (!_isRunning) { - _isRunning = true; - _interpreterThread = new std::thread(DebugSession::run, this); - } - - replyData.compound["status"] = Data("success", Data::VERBATIM); - } else { - replyData.compound["status"] = Data("failure", Data::VERBATIM); - } + Data replyData; + + if (_interpreter) { + // register ourself as a monitor + if (!_isRunning) { + _isRunning = true; + _interpreterThread = new std::thread(DebugSession::run, this); + } + + replyData.compound["status"] = Data("success", Data::VERBATIM); + } else { + replyData.compound["status"] = Data("failure", Data::VERBATIM); + } _resumeCond.notify_one(); return replyData; diff --git a/src/uscxml/debug/DebugSession.h b/src/uscxml/debug/DebugSession.h index c4f2564..fbfd065 100644 --- a/src/uscxml/debug/DebugSession.h +++ b/src/uscxml/debug/DebugSession.h @@ -34,8 +34,8 @@ class Debugger; class USCXML_API DebugSession : public std::enable_shared_from_this<DebugSession> { public: DebugSession() { - _isRunning = false; - _isStepping = false; + _isRunning = false; + _isStepping = false; _isAttached = false; _breakpointsEnabled = true; _markedForDeletion = false; @@ -88,9 +88,9 @@ protected: std::recursive_mutex _runMutex; std::recursive_mutex _mutex; - std::thread* _interpreterThread = NULL; - bool _isRunning; - static void run(void* instance); + std::thread* _interpreterThread = NULL; + bool _isRunning; + static void run(void* instance); bool _markedForDeletion; Debugger* _debugger; @@ -98,7 +98,7 @@ protected: std::set<Breakpoint> _breakPoints; Breakpoint _skipTo; - friend class Debugger; + friend class Debugger; }; diff --git a/src/uscxml/debug/Debugger.cpp b/src/uscxml/debug/Debugger.cpp index 1f13e40..9478927 100644 --- a/src/uscxml/debug/Debugger.cpp +++ b/src/uscxml/debug/Debugger.cpp @@ -25,7 +25,7 @@ namespace uscxml { void Debugger::afterCompletion(Interpreter& interpreter) { - InterpreterImpl* impl = interpreter.getImpl().get(); + InterpreterImpl* impl = interpreter.getImpl().get(); std::shared_ptr<DebugSession> session = getSession(impl); if (!session) return; @@ -72,9 +72,9 @@ std::list<Breakpoint> Debugger::getQualifiedTransBreakpoints(InterpreterImpl* im std::list<Breakpoint> breakpoints; XERCESC_NS::DOMElement* source = getSourceState(transition); - std::list<XERCESC_NS::DOMElement*> targets = getTargetStates(transition, impl->_scxml); + std::list<XERCESC_NS::DOMElement*> targets = getTargetStates(transition, impl->_scxml); - for (auto target : targets) { + for (auto target : targets) { Breakpoint bp = breakpointTemplate; // copy base as template bp.element = transition; @@ -143,9 +143,9 @@ void Debugger::handleExecutable(Interpreter& interpreter, std::shared_ptr<DebugSession> session = getSession(interpreter.getImpl().get()); if (!session) return; - if (!session->_isRunning) - return; - + if (!session->_isRunning) + return; + std::list<Breakpoint> breakpoints; Breakpoint breakpoint; @@ -160,12 +160,12 @@ void Debugger::handleExecutable(Interpreter& interpreter, } void Debugger::handleEvent(Interpreter& interpreter, const Event& event, Breakpoint::When when) { - InterpreterImpl* impl = interpreter.getImpl().get(); - std::shared_ptr<DebugSession> session = getSession(impl); - if (!session) - return; - if (!session->_isRunning) - return; + InterpreterImpl* impl = interpreter.getImpl().get(); + std::shared_ptr<DebugSession> session = getSession(impl); + if (!session) + return; + if (!session->_isRunning) + return; std::list<Breakpoint> breakpoints; @@ -180,12 +180,12 @@ void Debugger::handleEvent(Interpreter& interpreter, const Event& event, Breakpo } void Debugger::handleStable(Interpreter& interpreter, Breakpoint::When when) { - InterpreterImpl* impl = interpreter.getImpl().get(); - std::shared_ptr<DebugSession> session = getSession(impl); - if (!session) - return; - if (!session->_isRunning) - return; + InterpreterImpl* impl = interpreter.getImpl().get(); + std::shared_ptr<DebugSession> session = getSession(impl); + if (!session) + return; + if (!session->_isRunning) + return; std::list<Breakpoint> breakpoints; @@ -198,12 +198,12 @@ void Debugger::handleStable(Interpreter& interpreter, Breakpoint::When when) { } void Debugger::handleMicrostep(Interpreter& interpreter, Breakpoint::When when) { - InterpreterImpl* impl = interpreter.getImpl().get(); - std::shared_ptr<DebugSession> session = getSession(impl); - if (!session) - return; - if (!session->_isRunning) - return; + InterpreterImpl* impl = interpreter.getImpl().get(); + std::shared_ptr<DebugSession> session = getSession(impl); + if (!session) + return; + if (!session->_isRunning) + return; std::list<Breakpoint> breakpoints; @@ -216,12 +216,12 @@ void Debugger::handleMicrostep(Interpreter& interpreter, Breakpoint::When when) } void Debugger::handleTransition(Interpreter& interpreter, const XERCESC_NS::DOMElement* transition, Breakpoint::When when) { - InterpreterImpl* impl = interpreter.getImpl().get(); - std::shared_ptr<DebugSession> session = getSession(impl); - if (!session) - return; - if (!session->_isRunning) - return; + InterpreterImpl* impl = interpreter.getImpl().get(); + std::shared_ptr<DebugSession> session = getSession(impl); + if (!session) + return; + if (!session->_isRunning) + return; Breakpoint breakpointTemplate; breakpointTemplate.when = when; @@ -230,12 +230,12 @@ void Debugger::handleTransition(Interpreter& interpreter, const XERCESC_NS::DOME } void Debugger::handleState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state, Breakpoint::When when, Breakpoint::Action action) { - InterpreterImpl* impl = interpreter.getImpl().get(); - std::shared_ptr<DebugSession> session = getSession(impl); - if (!session) - return; - if (!session->_isRunning) - return; + InterpreterImpl* impl = interpreter.getImpl().get(); + std::shared_ptr<DebugSession> session = getSession(impl); + if (!session) + return; + if (!session->_isRunning) + return; Breakpoint breakpointTemplate; breakpointTemplate.when = when; @@ -246,12 +246,12 @@ void Debugger::handleState(Interpreter& interpreter, const XERCESC_NS::DOMElemen } void Debugger::handleInvoke(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeId, Breakpoint::When when, Breakpoint::Action action) { - InterpreterImpl* impl = interpreter.getImpl().get(); - std::shared_ptr<DebugSession> session = getSession(impl); - if (!session) - return; - if (!session->_isRunning) - return; + InterpreterImpl* impl = interpreter.getImpl().get(); + std::shared_ptr<DebugSession> session = getSession(impl); + if (!session) + return; + if (!session->_isRunning) + return; Breakpoint breakpointTemplate; breakpointTemplate.when = when; diff --git a/src/uscxml/debug/Debugger.h b/src/uscxml/debug/Debugger.h index 4b564cb..d69e6f6 100644 --- a/src/uscxml/debug/Debugger.h +++ b/src/uscxml/debug/Debugger.h @@ -55,24 +55,24 @@ public: virtual void pushData(std::shared_ptr<DebugSession> session, Data pushData) = 0; // InterpreterMonitor - virtual void beforeProcessingEvent(Interpreter& interpreter, const Event& event); - virtual void beforeMicroStep(Interpreter& interpreter); - virtual void beforeExitingState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state); - virtual void afterExitingState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state); - virtual void beforeExecutingContent(Interpreter& interpreter, const XERCESC_NS::DOMElement* execContent); - virtual void afterExecutingContent(Interpreter& interpreter, const XERCESC_NS::DOMElement* execContent); - virtual void beforeUninvoking(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeid); - virtual void afterUninvoking(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeid); - virtual void beforeTakingTransition(Interpreter& interpreter, const XERCESC_NS::DOMElement* transition); - virtual void afterTakingTransition(Interpreter& interpreter, const XERCESC_NS::DOMElement* transition); - virtual void beforeEnteringState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state); - virtual void afterEnteringState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state); - virtual void beforeInvoking(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeid); - virtual void afterInvoking(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeid); - virtual void afterMicroStep(Interpreter& interpreter); - virtual void onStableConfiguration(Interpreter& interpreter); - virtual void beforeCompletion(Interpreter& interpreter); - virtual void afterCompletion(Interpreter& interpreter); + virtual void beforeProcessingEvent(Interpreter& interpreter, const Event& event); + virtual void beforeMicroStep(Interpreter& interpreter); + virtual void beforeExitingState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state); + virtual void afterExitingState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state); + virtual void beforeExecutingContent(Interpreter& interpreter, const XERCESC_NS::DOMElement* execContent); + virtual void afterExecutingContent(Interpreter& interpreter, const XERCESC_NS::DOMElement* execContent); + virtual void beforeUninvoking(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeid); + virtual void afterUninvoking(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeid); + virtual void beforeTakingTransition(Interpreter& interpreter, const XERCESC_NS::DOMElement* transition); + virtual void afterTakingTransition(Interpreter& interpreter, const XERCESC_NS::DOMElement* transition); + virtual void beforeEnteringState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state); + virtual void afterEnteringState(Interpreter& interpreter, const XERCESC_NS::DOMElement* state); + virtual void beforeInvoking(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeid); + virtual void afterInvoking(Interpreter& interpreter, const XERCESC_NS::DOMElement* invokeElem, const std::string& invokeid); + virtual void afterMicroStep(Interpreter& interpreter); + virtual void onStableConfiguration(Interpreter& interpreter); + virtual void beforeCompletion(Interpreter& interpreter); + virtual void afterCompletion(Interpreter& interpreter); protected: @@ -95,19 +95,19 @@ protected: void handleMicrostep(Interpreter& interpreter, Breakpoint::When when); void handleEvent(Interpreter& interpreter, const Event& event, Breakpoint::When when); - std::list<Breakpoint> getQualifiedTransBreakpoints(InterpreterImpl* impl, - const XERCESC_NS::DOMElement* transition, - Breakpoint breakpointTemplate); - std::list<Breakpoint> getQualifiedStateBreakpoints(InterpreterImpl* impl, - const XERCESC_NS::DOMElement* state, - Breakpoint breakpointTemplate); - std::list<Breakpoint> getQualifiedInvokeBreakpoints(InterpreterImpl* impl, - const XERCESC_NS::DOMElement* invokeElem, - const std::string invokeId, - Breakpoint breakpointTemplate); + std::list<Breakpoint> getQualifiedTransBreakpoints(InterpreterImpl* impl, + const XERCESC_NS::DOMElement* transition, + Breakpoint breakpointTemplate); + std::list<Breakpoint> getQualifiedStateBreakpoints(InterpreterImpl* impl, + const XERCESC_NS::DOMElement* state, + Breakpoint breakpointTemplate); + std::list<Breakpoint> getQualifiedInvokeBreakpoints(InterpreterImpl* impl, + const XERCESC_NS::DOMElement* invokeElem, + const std::string invokeId, + Breakpoint breakpointTemplate); std::recursive_mutex _sessionMutex; - /// @todo: We ought to change form InterpreterImpl to Interpreter everywhere + /// @todo: We ought to change form InterpreterImpl to Interpreter everywhere std::map<InterpreterImpl*, std::shared_ptr<DebugSession> > _sessionForInterpreter; }; diff --git a/src/uscxml/debug/DebuggerServlet.cpp b/src/uscxml/debug/DebuggerServlet.cpp index 25df9dd..34c1eca 100644 --- a/src/uscxml/debug/DebuggerServlet.cpp +++ b/src/uscxml/debug/DebuggerServlet.cpp @@ -219,10 +219,10 @@ void DebuggerServlet::processDisconnect(const HTTPServer::Request& request) { void DebuggerServlet::processListSessions(const HTTPServer::Request& request) { Data replyData; - std::map<std::string, std::weak_ptr<InterpreterImpl> > instances = InterpreterImpl::getInstances(); - for (auto weakInstance : instances) { + std::map<std::string, std::weak_ptr<InterpreterImpl> > instances = InterpreterImpl::getInstances(); + for (auto weakInstance : instances) { - std::shared_ptr<InterpreterImpl> instance = weakInstance.second.lock(); + std::shared_ptr<InterpreterImpl> instance = weakInstance.second.lock(); if (instance) { Data sessionData; sessionData.compound["name"] = Data(instance->getName(), Data::VERBATIM); diff --git a/src/uscxml/debug/DebuggerServlet.h b/src/uscxml/debug/DebuggerServlet.h index 2ed1879..a1f18e3 100644 --- a/src/uscxml/debug/DebuggerServlet.h +++ b/src/uscxml/debug/DebuggerServlet.h @@ -34,7 +34,7 @@ public: class LogMessage : public Data { public: #if 0 - LogMessage(google::LogSeverity severity, const char* full_filename, + LogMessage(google::LogSeverity severity, const char* full_filename, const char* base_filename, int line, const struct ::tm* tm_time, std::string message, std::string formatted) { @@ -86,13 +86,13 @@ public: // void processPoll(const HTTPServer::Request& request); // Logsink - /** + /** virtual void send(google::LogSeverity severity, const char* full_filename, const char* base_filename, int line, const struct ::tm* tm_time, const char* message, size_t message_len); -*/ - void handle(const el::LogDispatchData* data); + */ + void handle(const el::LogDispatchData* data); protected: void serverPushData(std::shared_ptr<DebugSession>); diff --git a/src/uscxml/debug/InterpreterIssue.cpp b/src/uscxml/debug/InterpreterIssue.cpp index df2d125..90e06b4 100644 --- a/src/uscxml/debug/InterpreterIssue.cpp +++ b/src/uscxml/debug/InterpreterIssue.cpp @@ -39,7 +39,7 @@ InterpreterIssue::InterpreterIssue(const std::string& msg, DOMNode* node, IssueS // find all elements in the SCXML namespace in one traversal void assembleNodeSets(const std::string nsPrefix, DOMElement* node, std::map<std::string, std::list<DOMElement*> >& sets) { - for (auto childElem = node->getFirstElementChild(); childElem; childElem = childElem->getNextElementSibling()) { + for (auto childElem = node->getFirstElementChild(); childElem; childElem = childElem->getNextElementSibling()) { if (TAGNAME(childElem).find(nsPrefix) == 0) { // correct namespace, insert via localname @@ -57,7 +57,7 @@ std::list<std::set<const DOMElement* > > getAllConfigurations(const DOMElement* std::cout << *root; - for (auto childElem = root->getFirstElementChild(); childElem; childElem = childElem->getNextElementSibling()) { + for (auto childElem = root->getFirstElementChild(); childElem; childElem = childElem->getNextElementSibling()) { std::cout << *childElem; if (XMLString::compareIString(childElem->getTagName(), X(nsPrefix + "state")) == 0 || |