CFrameProcessor_J1939::~CFrameProcessor_J1939()
{
    DELETE_ARRAY(m_pbyJ1939Data);
    DELETE_ARRAY(m_sJ1939Data.m_pbyData);

    vEmptyLogObjArray(m_omLogListTmp);
    vEmptyLogObjArray(m_omLogObjectArray);
}
HRESULT CFrameProcessor_Common::ClearLoggingBlockList(void)
{
    if (m_bEditingON)
    {
        vEmptyLogObjArray(m_omLogListTmp);
        CLEAR_EXPR_FLAG(m_bLogFlagTmp);
    }
    else
    {
        vEmptyLogObjArray(m_omLogObjectArray);
        CLEAR_EXPR_FLAG(m_bExprnFlag_Log);
    }

    return S_OK;
}
HRESULT CFrameProcessor_Common::Reset(void)
{
    vEmptyLogObjArray(m_omLogListTmp);
    //m_omLogListTmp.Copy(m_omLogObjectArray);
    vCopyLogObjArray(m_omLogListTmp, m_omLogObjectArray);
    m_bLogFlagTmp = m_bExprnFlag_Log;
    return S_OK;
}
HRESULT CFrameProcessor_Common::Confirm(void)
{
    HRESULT hResult = S_FALSE;

    if (bIsEditingON())
    {
        vUpdateLoggingFlag(); // First ensure m_bLogFlagTmp is updated
        vEmptyLogObjArray(m_omLogObjectArray);
        //m_omLogObjectArray.Copy(m_omLogListTmp);
        vCopyLogObjArray(m_omLogObjectArray, m_omLogListTmp);
        m_bExprnFlag_Log = m_bLogFlagTmp; // Then only assign value to log flag
        hResult = S_OK;
    }

    return hResult;
}
void CFrameProcessor_Common::vCopyLogObjArray(
    CLogObjArray& omLogObjArrayTarget, const CLogObjArray& omLogObjArraySrc)
{
    // First empty the target log object array
    vEmptyLogObjArray(omLogObjArrayTarget);
    USHORT ushBlocks = (USHORT) (omLogObjArraySrc.GetSize());

    if (ushBlocks > 0)
    {
        for (USHORT i = 0; i < ushBlocks; i++)
        {
            const CBaseLogObject* pouCurrLogObj = omLogObjArraySrc.GetAt(i);
            CBaseLogObject* pouNewLogObj = CreateNewLogObj();
            *pouNewLogObj = *pouCurrLogObj;
            omLogObjArrayTarget.Add(pouNewLogObj);
        }
    }
}
HRESULT CFrameProcessor_Common::StopEditingSession(BOOL bConfirm)
{
    HRESULT hResult = S_OK; // Success is default assumption

    if (bIsEditingON())     // Proceed only when editing is going on
    {
        if (bConfirm)       // Confirm changes and stop the session
        {
            hResult = Confirm();
        }
        if (S_OK == hResult) // Wrap up only if everything is successful
        {
            vEmptyLogObjArray(m_omLogListTmp); // Clean the temporary repository
            m_bEditingON = FALSE;
        }
    }
    else
    {
        hResult = S_FALSE; // Not supposed to call otherwise
    }

    return hResult;
}
CFrameProcessor_CAN::~CFrameProcessor_CAN()
{
    vEmptyLogObjArray(m_omLogListTmp);
    vEmptyLogObjArray(m_omLogObjectArray);
}