EaseExponentialInOut* EaseExponentialInOut::create(ActionInterval *action)
{
    EaseExponentialInOut *ret = new (std::nothrow) EaseExponentialInOut();
    if (ret && ret->initWithAction(action))
    {
        ret->autorelease();
        return ret;
    }

    delete ret;
    return nullptr;
}
EaseExponentialInOut* EaseExponentialInOut::create(ActionInterval *action)
{
    EaseExponentialInOut *ret = new (std::nothrow) EaseExponentialInOut();
    if (ret)
    {
        if (ret->initWithAction(action))
        {
            ret->autorelease();
        }
        else
        {
            CC_SAFE_RELEASE_NULL(ret);
        }
    }

    return ret;
}
EaseExponentialInOut* EaseExponentialInOut::create(ActionInterval *pAction)
{
    EaseExponentialInOut *pRet = new EaseExponentialInOut();
    if (pRet)
    {
        if (pRet->initWithAction(pAction))
        {
            pRet->autorelease();
        }
        else
        {
            CC_SAFE_RELEASE_NULL(pRet);
        }
    }

    return pRet; 
}
Object* EaseExponentialInOut::copyWithZone(Zone *pZone)
{
    Zone* pNewZone = NULL;
    EaseExponentialInOut* pCopy = NULL;
    if(pZone && pZone->_copyObject) 
    {
        //in case of being called at sub class
        pCopy = (EaseExponentialInOut*)(pZone->_copyObject);
    }
    else
    {
        pCopy = new EaseExponentialInOut();
        pNewZone = new Zone(pCopy);
    }

    pCopy->initWithAction((ActionInterval *)(_inner->copy()->autorelease()));
    
    CC_SAFE_DELETE(pNewZone);
    return pCopy;
}