void ActionListSwitch::GenerateCaseMap() { Datum& cases = Actions(); Datum::DatumType switchType = Datum::DatumType::UNKNOWN; if (cases.Size() > 0) { delete mCaseMap; mCaseMap = new Hashmap<Datum, ActionListSwitchCase*>(cases.Size()); Datum* conditionDatum = Search((*this)[ATTRIBUTE_SWITCH_VALUE].Get<std::string>()); if (conditionDatum == nullptr) { std::stringstream str; str << "Undefined variable: " << (*this)[ATTRIBUTE_SWITCH_VALUE].Get<std::string>(); throw std::exception(str.str().c_str()); } switchType = conditionDatum->Type(); } for (uint32_t i = 0; i < cases.Size(); i++) { ActionListSwitchCase* switchCase = cases.Get<Scope>(i).As<ActionListSwitchCase>(); if (switchCase == nullptr) continue; if (switchCase->DefaultCase) { Adopt(ActionListSwitchCase::ATTRIBUTE_DEFAULT, *switchCase); } else { Datum d; d.SetType(switchType); d.SetFromString(switchCase->operator[](ActionListSwitchCase::ATTRIBUTE_CASE_VALUE).Get<std::string>()); mCaseMap->Insert(d, switchCase); } } }