Browse Source

Added reset() API to ParserStateMachine

Not unittested
Tatsuhiro Tsujikawa 13 years ago
parent
commit
5352d76d4f

+ 5 - 0
src/MetalinkParserController.cc

@@ -63,6 +63,11 @@ MetalinkParserController::MetalinkParserController():
 
 MetalinkParserController::~MetalinkParserController() {}
 
+void MetalinkParserController::reset()
+{
+  metalinker_.reset(new Metalinker());
+}
+
 void MetalinkParserController::newEntryTransaction()
 {
   tEntry_.reset(new MetalinkEntry());

+ 2 - 0
src/MetalinkParserController.h

@@ -87,6 +87,8 @@ public:
 
   ~MetalinkParserController();
 
+  void reset();
+
   const SharedHandle<Metalinker>& getResult() const
   {
     return metalinker_;

+ 10 - 0
src/MetalinkParserStateMachine.cc

@@ -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_);

+ 2 - 0
src/MetalinkParserStateMachine.h

@@ -111,6 +111,8 @@ public:
    const char* nsUri,
    const std::string& characters);
 
+  virtual void reset();
+
   void setSkipTagState();
 
   void setMetalinkState();

+ 4 - 0
src/ParserStateMachine.h

@@ -63,6 +63,10 @@ public:
    const char* prefix,
    const char* nsUri,
    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

+ 1 - 1
src/Xml2XmlParser.cc

@@ -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) {

+ 9 - 0
src/XmlRpcRequestParserStateMachine.cc

@@ -101,6 +101,15 @@ XmlRpcRequestParserStateMachine::~XmlRpcRequestParserStateMachine()
   delete controller_;
 }
 
+void XmlRpcRequestParserStateMachine::reset()
+{
+  controller_->reset();
+  while(!stateStack_.empty()) {
+    stateStack_.pop();
+  }
+  stateStack_.push(initialState);
+}
+
 bool XmlRpcRequestParserStateMachine::needsCharactersBuffering() const
 {
   return stateStack_.top()->needsCharactersBuffering();

+ 2 - 0
src/XmlRpcRequestParserStateMachine.h

@@ -71,6 +71,8 @@ public:
    const char* nsUri,
    const std::string& characters);
 
+  virtual void reset();
+
   void setMethodName(const std::string& methodName);
   const std::string& getMethodName() const;
   void popArrayFrame();