  
/*
 * Copyright 2019-present Infosys Limited  
 *   
 * SPDX-License-Identifier: Apache-2.0    
 */
 
/**************************************
 * attachStart.cpp
 * This is an auto generated file.
 * Please do not edit this file.
 * All edits to be made through template source file
 * <TOP-DIR/scripts/SMCodeGen/templates/stateMachineTmpls/state.cpp.tt>
 **************************************/

#include "smEnumTypes.h"
#include "actionTable.h"
#include "actionHandlers/actionHandlers.h"

#include "mmeStates/attachStart.h"	
#include "mmeStates/attachWfImsiValidateAction.h"

using namespace mme;
using namespace SM;

/******************************************************************************
* Constructor
******************************************************************************/
AttachStart::AttachStart():State(State_e::attach_start)
{
}

/******************************************************************************
* Destructor
******************************************************************************/
AttachStart::~AttachStart()
{
}

/******************************************************************************
* creates and returns static instance
******************************************************************************/
AttachStart* AttachStart::Instance()
{
        static AttachStart state;
        return &state;
}

/******************************************************************************
* initializes eventToActionsMap
******************************************************************************/
void AttachStart::initialize()
{
        {
                ActionTable actionTable;
                actionTable.addAction(&ActionHandlers::validate_imsi_in_ue_context);
                actionTable.setNextState(AttachWfImsiValidateAction::Instance());
                eventToActionsMap.insert(pair<Event_e, ActionTable>(Event_e::VALIDATE_IMSI, actionTable));
        }
}
