Added reset() API to ParserStateMachine

Not unittested
pull/25/merge
Tatsuhiro Tsujikawa 2012-07-13 00:53:56 +09:00
parent 70685bd233
commit 5352d76d4f
8 changed files with 35 additions and 1 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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