/* */ #ifndef D_VALUE_BASE_STRUCT_PARSER_STATE_MACHINE_H #define D_VALUE_BASE_STRUCT_PARSER_STATE_MACHINE_H #include "StructParserStateMachine.h" #include #include #include namespace aria2 { class ValueBase; namespace rpc { class XmlRpcRequestParserController; } // namespace rpc; class ValueBaseStructParserState; // Implementation of StructParserStateMachine, using ValueBase as // value holder. class ValueBaseStructParserStateMachine : public StructParserStateMachine { public: typedef std::shared_ptr ResultType; static const std::shared_ptr& noResult(); struct NumberData { int64_t number; int frac; int exp; }; struct SessionData { std::string str; NumberData number; bool bval; }; ValueBaseStructParserStateMachine(); virtual ~ValueBaseStructParserStateMachine(); virtual void beginElement(int elementType); virtual void endElement(int elementType); virtual void charactersCallback(const char* data, size_t len); virtual void numberCallback(int64_t number, int frac, int exp); virtual void boolCallback(bool bval); std::shared_ptr getResult() const; virtual void reset(); const std::string& getCharacters() const; const NumberData& getNumber() const; bool getBool() const; void popArrayFrame(); void popDictFrame(); void pushFrame(); void setCurrentFrameValue(const std::shared_ptr& value); const std::shared_ptr& getCurrentFrameValue() const; void setCurrentFrameName(const std::string& name); void pushDictState(); void pushDictKeyState(); void pushDictDataState(); void pushArrayState(); void pushArrayDataState(); void pushStringState(); void pushNumberState(); void pushBoolState(); void pushNullState(); private: rpc::XmlRpcRequestParserController* ctrl_; std::stack stateStack_; SessionData sessionData_; }; } // namespace aria2 #endif // D_VALUE_BASE_STRUCT_PARSER_STATE_MACHINE_H