/* */ #include "ValueBaseStructParserStateImpl.h" #include #include "ValueBaseStructParserStateMachine.h" #include "ValueBase.h" namespace aria2 { void ValueValueBaseStructParserState::beginElement( ValueBaseStructParserStateMachine* psm, int elementType) { switch (elementType) { case STRUCT_DICT_T: psm->setCurrentFrameValue(Dict::g()); psm->pushDictState(); break; case STRUCT_ARRAY_T: psm->setCurrentFrameValue(List::g()); psm->pushArrayState(); break; case STRUCT_STRING_T: psm->pushStringState(); break; case STRUCT_NUMBER_T: psm->pushNumberState(); break; case STRUCT_BOOL_T: psm->pushBoolState(); break; case STRUCT_NULL_T: psm->pushNullState(); break; default: // Not reachable assert(0); } } void DictValueBaseStructParserState::beginElement( ValueBaseStructParserStateMachine* psm, int elementType) { switch (elementType) { case STRUCT_DICT_KEY_T: psm->pushFrame(); psm->pushDictKeyState(); break; case STRUCT_DICT_DATA_T: psm->pushDictDataState(); break; default: // Not reachable assert(0); } } void DictKeyValueBaseStructParserState::endElement( ValueBaseStructParserStateMachine* psm, int elementType) { psm->setCurrentFrameName(psm->getCharacters()); } void DictDataValueBaseStructParserState::endElement( ValueBaseStructParserStateMachine* psm, int elementType) { psm->popDictFrame(); } void ArrayValueBaseStructParserState::beginElement( ValueBaseStructParserStateMachine* psm, int elementType) { assert(elementType == STRUCT_ARRAY_DATA_T); psm->pushFrame(); psm->pushArrayDataState(); } void ArrayDataValueBaseStructParserState::endElement( ValueBaseStructParserStateMachine* psm, int elementType) { psm->popArrayFrame(); } void StringValueBaseStructParserState::endElement( ValueBaseStructParserStateMachine* psm, int elementType) { psm->setCurrentFrameValue(String::g(psm->getCharacters())); } void NumberValueBaseStructParserState::endElement( ValueBaseStructParserStateMachine* psm, int elementType) { // TODO Ignore frac and exp psm->setCurrentFrameValue(Integer::g(psm->getNumber().number)); } void BoolValueBaseStructParserState::endElement( ValueBaseStructParserStateMachine* psm, int elementType) { psm->setCurrentFrameValue(psm->getBool() ? Bool::gTrue() : Bool::gFalse()); } void NullValueBaseStructParserState::endElement( ValueBaseStructParserStateMachine* psm, int elementType) { psm->setCurrentFrameValue(Null::g()); } } // namespace aria2