summaryrefslogtreecommitdiff
path: root/src/MetalinkParserStateMachine.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-10-03 12:52:16 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-10-03 12:52:16 +0000
commitc55d2e5512e07084fa4a58b2a5fef92a2c258622 (patch)
tree18b566fb9d546f9e6efca5a98ef54a8bd5f0788d /src/MetalinkParserStateMachine.cc
parent99654e41602787e0083740bf8c88eee426ce4a76 (diff)
2009-10-03 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Put all MetalinkParserState subclasses into MetalinkParserStateImpl.cc. Use stack to track element structure.
Diffstat (limited to 'src/MetalinkParserStateMachine.cc')
-rw-r--r--src/MetalinkParserStateMachine.cc139
1 files changed, 63 insertions, 76 deletions
diff --git a/src/MetalinkParserStateMachine.cc b/src/MetalinkParserStateMachine.cc
index 40595723..7ebaa596 100644
--- a/src/MetalinkParserStateMachine.cc
+++ b/src/MetalinkParserStateMachine.cc
@@ -33,147 +33,129 @@
*/
/* copyright --> */
#include "MetalinkParserStateMachine.h"
-#include "InitialMetalinkParserState.h"
-#include "MetalinkMetalinkParserState.h"
-#include "FilesMetalinkParserState.h"
-#include "FileMetalinkParserState.h"
-#include "SizeMetalinkParserState.h"
-#include "VersionMetalinkParserState.h"
-#include "LanguageMetalinkParserState.h"
-#include "OSMetalinkParserState.h"
-#include "VerificationMetalinkParserState.h"
-#include "HashMetalinkParserState.h"
-#include "PiecesMetalinkParserState.h"
-#include "PieceHashMetalinkParserState.h"
-#include "SignatureMetalinkParserState.h"
-#include "ResourcesMetalinkParserState.h"
-#include "URLMetalinkParserState.h"
-#include "FinMetalinkParserState.h"
-#include "SkipTagMetalinkParserState.h"
+#include "MetalinkParserStateImpl.h"
#include "Metalinker.h"
#include "MetalinkEntry.h"
namespace aria2 {
-MetalinkParserState* MetalinkParserStateMachine::_initialState = new InitialMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_metalinkState = new MetalinkMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_filesState = new FilesMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_fileState = new FileMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_sizeState = new SizeMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_versionState = new VersionMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_languageState = new LanguageMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_osState = new OSMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_verificationState = new VerificationMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_hashState = new HashMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_piecesState = new PiecesMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_pieceHashState = new PieceHashMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_initialState =
+ new InitialMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_metalinkState =
+ new MetalinkMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_filesState =
+ new FilesMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_fileState =
+ new FileMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_sizeState =
+ new SizeMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_versionState =
+ new VersionMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_languageState =
+ new LanguageMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_osState =
+ new OSMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_verificationState =
+ new VerificationMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_hashState =
+ new HashMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_piecesState =
+ new PiecesMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_pieceHashState =
+ new PieceHashMetalinkParserState();
MetalinkParserState* MetalinkParserStateMachine::_signatureState =
new SignatureMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_resourcesState = new ResourcesMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_urlState = new URLMetalinkParserState();
-MetalinkParserState* MetalinkParserStateMachine::_finState = new FinMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_resourcesState =
+ new ResourcesMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_urlState =
+ new URLMetalinkParserState();
+MetalinkParserState* MetalinkParserStateMachine::_skipTagState =
+ new SkipTagMetalinkParserState();
MetalinkParserStateMachine::MetalinkParserStateMachine():
- _ctrl(new MetalinkParserController()),
- _state(_initialState),
- _skipTagState(0) {}
-
-MetalinkParserStateMachine::~MetalinkParserStateMachine()
+ _ctrl(new MetalinkParserController())
{
- delete _skipTagState;
+ _stateStack.push(_initialState);
}
void MetalinkParserStateMachine::setMetalinkState()
{
- _state = _metalinkState;
+ _stateStack.push(_metalinkState);
}
void MetalinkParserStateMachine::setFilesState()
{
- _state = _filesState;
+ _stateStack.push(_filesState);
}
void MetalinkParserStateMachine::setFileState()
{
- _state = _fileState;
+ _stateStack.push(_fileState);
}
void MetalinkParserStateMachine::setSizeState()
{
- _state = _sizeState;
+ _stateStack.push(_sizeState);
}
void MetalinkParserStateMachine::setVersionState()
{
- _state = _versionState;
+ _stateStack.push(_versionState);
}
void MetalinkParserStateMachine::setLanguageState()
{
- _state = _languageState;
+ _stateStack.push(_languageState);
}
void MetalinkParserStateMachine::setOSState()
{
- _state = _osState;
+ _stateStack.push(_osState);
}
void MetalinkParserStateMachine::setVerificationState()
{
- _state = _verificationState;
+ _stateStack.push(_verificationState);
}
void MetalinkParserStateMachine::setHashState()
{
- _state = _hashState;
+ _stateStack.push(_hashState);
}
void MetalinkParserStateMachine::setPiecesState()
{
- _state = _piecesState;
+ _stateStack.push(_piecesState);
}
void MetalinkParserStateMachine::setPieceHashState()
{
- _state = _pieceHashState;
+ _stateStack.push(_pieceHashState);
}
void MetalinkParserStateMachine::setSignatureState()
{
- _state = _signatureState;
+ _stateStack.push(_signatureState);
}
void MetalinkParserStateMachine::setResourcesState()
{
- _state = _resourcesState;
+ _stateStack.push(_resourcesState);
}
void MetalinkParserStateMachine::setURLState()
{
- _state = _urlState;
-}
-
-void MetalinkParserStateMachine::setFinState()
-{
- _state = _finState;
-}
-
-void MetalinkParserStateMachine::setSkipTagState(MetalinkParserState* prevState)
-{
- _skipTagState = new SkipTagMetalinkParserState(prevState);
- _state = _skipTagState;
+ _stateStack.push(_urlState);
}
-void MetalinkParserStateMachine::restoreSavedState()
+void MetalinkParserStateMachine::setSkipTagState()
{
- _state = _skipTagState->getPreviousState();
- delete _skipTagState;
- _skipTagState = 0;
+ _stateStack.push(_skipTagState);
}
bool MetalinkParserStateMachine::finished() const
{
- return _state == _finState;
+ return _stateStack.top() == _initialState;
}
void MetalinkParserStateMachine::newEntryTransaction()
@@ -231,7 +213,8 @@ void MetalinkParserStateMachine::setTypeOfResource(const std::string& type)
_ctrl->setTypeOfResource(type);
}
-void MetalinkParserStateMachine::setLocationOfResource(const std::string& location)
+void MetalinkParserStateMachine::setLocationOfResource
+(const std::string& location)
{
_ctrl->setLocationOfResource(location);
}
@@ -301,7 +284,8 @@ void MetalinkParserStateMachine::createNewHashOfChunkChecksum(size_t order)
_ctrl->createNewHashOfChunkChecksum(order);
}
-void MetalinkParserStateMachine::setMessageDigestOfChunkChecksum(const std::string& md)
+void MetalinkParserStateMachine::setMessageDigestOfChunkChecksum
+(const std::string& md)
{
_ctrl->setMessageDigestOfChunkChecksum(md);
}
@@ -351,20 +335,23 @@ void MetalinkParserStateMachine::cancelSignatureTransaction()
_ctrl->cancelSignatureTransaction();
}
-void MetalinkParserStateMachine::beginElement(const std::string& name,
- const std::map<std::string, std::string>& attrs)
+void MetalinkParserStateMachine::beginElement
+(const std::string& name,
+ const std::map<std::string, std::string>& attrs)
{
- _state->beginElement(this, name, attrs);
+ _stateStack.top()->beginElement(this, name, attrs);
}
-void MetalinkParserStateMachine::endElement(const std::string& name, const std::string& characters)
+void MetalinkParserStateMachine::endElement
+(const std::string& name, const std::string& characters)
{
- _state->endElement(this, name, characters);
+ _stateStack.top()->endElement(this, name, characters);
+ _stateStack.pop();
}
bool MetalinkParserStateMachine::needsCharactersBuffering() const
{
- return _state->needsCharactersBuffering();
+ return _stateStack.top()->needsCharactersBuffering();
}
} // namespace aria2