Not unittested
@@ -63,6 +63,11 @@ MetalinkParserController::MetalinkParserController():
MetalinkParserController::~MetalinkParserController() {}
+void MetalinkParserController::reset()
+{
+ metalinker_.reset(new Metalinker());
+}
+
void MetalinkParserController::newEntryTransaction()
{
tEntry_.reset(new MetalinkEntry());
@@ -87,6 +87,8 @@ public:
~MetalinkParserController();
+ void reset();
const SharedHandle<Metalinker>& getResult() const
return metalinker_;
@@ -112,6 +112,16 @@ MetalinkParserStateMachine::MetalinkParserStateMachine():
MetalinkParserStateMachine::~MetalinkParserStateMachine() {}
+void MetalinkParserStateMachine::reset()
+ ctrl_->reset();
+ errors_.clear();
+ while(!stateStack_.empty()) {
+ stateStack_.pop();
+ }
+ stateStack_.push(initialState_);
void MetalinkParserStateMachine::setMetalinkState()
stateStack_.push(metalinkState_);
@@ -111,6 +111,8 @@ public:
const char* nsUri,
const std::string& characters);
+ virtual void reset();
void setSkipTagState();
void setMetalinkState();
@@ -63,6 +63,10 @@ public:
const char* prefix,
const std::string& characters) = 0;
+ // Resets internal state of the object and make it ready for new
+ // parser session.
+ virtual void reset() = 0;
};
} // namespace aria2
@@ -197,7 +197,7 @@ ssize_t XmlParser::parseFinal(const char* data, size_t size)
int XmlParser::reset()
- // TODO psm must be reset
+ psm_->reset();
sessionData_.reset();
int rv = xmlCtxtResetPush(ctx_, 0, 0, 0, 0);
if(rv != 0) {
@@ -101,6 +101,15 @@ XmlRpcRequestParserStateMachine::~XmlRpcRequestParserStateMachine()
delete controller_;
}
+void XmlRpcRequestParserStateMachine::reset()
+ controller_->reset();
+ stateStack_.push(initialState);
bool XmlRpcRequestParserStateMachine::needsCharactersBuffering() const
return stateStack_.top()->needsCharactersBuffering();
@@ -71,6 +71,8 @@ public:
void setMethodName(const std::string& methodName);
const std::string& getMethodName() const;
void popArrayFrame();