Пример #1
0
BYTE* pbyGetFilterConfig(BYTE* pbyTrgBuffer,
                         CModuleFilterArray* pouModuleFilterArray,
                         const SFILTERAPPLIED_CAN* SrcFilter)
{
    BYTE* pbyTemp = pbyTrgBuffer;
    USHORT ushFilterCount = 0;

    if (pouModuleFilterArray != NULL && (SrcFilter != NULL))
    {
        ushFilterCount = (USHORT)pouModuleFilterArray->GetSize();
    }

    SFILTERAPPLIED_CAN sFilterApplied;
    sFilterApplied.vClear();
    sFilterApplied.m_bEnabled = TRUE;
    sFilterApplied.m_ushTotal = ushFilterCount;
    sFilterApplied.m_psFilters = new SFILTERSET[sFilterApplied.m_ushTotal];

    for (INT i = 0; i < ushFilterCount; i++)
    {
        //update filter applied
        SMODULEFILTER sModuleFilter = pouModuleFilterArray->GetAt(i);
        SFILTERSET* psFilterSet =
            SFILTERSET::psGetFilterSetPointer(SrcFilter->m_psFilters,
                                              SrcFilter->m_ushTotal,
                                              sModuleFilter.m_omFilterName);

        if (psFilterSet != NULL)
        {
            sFilterApplied.m_psFilters[i].bClone(*psFilterSet);
        }
    }

    pbyTemp = sFilterApplied.pbGetConfigData(pbyTemp);
    sFilterApplied.vClear();
    return pbyTemp;
}
static void vPopulateFilterApplied(const SFILTERAPPLIED_CAN* psFilterConfigured, SFILTERAPPLIED_CAN& sFilterApplied, CMainEntryList& SrcList)
{
    if ( psFilterConfigured == nullptr )
    {
        return;
    }

    const SMAINENTRY& sMainEntry = SrcList.GetHead();
    int nCount  = sMainEntry.m_odSelEntryList.GetCount();

    SFILTERAPPLIED_CAN    sTempAppliedFilter;
    sTempAppliedFilter.bClone(sFilterApplied);
    sFilterApplied.vClear();
    sFilterApplied.m_psFilters = new SFILTERSET[nCount];

    POSITION pos = sMainEntry.m_odSelEntryList.GetHeadPosition();
    while (pos)
    {
        SSUBENTRY sSubEntry = sMainEntry.m_odSelEntryList.GetNext(pos);
        const PSFILTERSET psTemp = SFILTERSET::psGetFilterSetPointer(psFilterConfigured->m_psFilters,
                                   psFilterConfigured->m_ushTotal, sSubEntry.m_omSubEntryName.GetBuffer(MAX_PATH));
        if (psTemp != nullptr)
        {
            sFilterApplied.m_psFilters[sFilterApplied.m_ushTotal].bClone(*psTemp);
            sFilterApplied.m_ushTotal++;
        }
    }

    //restore the enable flag for all filters
    for(int nAppFilterCnt = 0; nAppFilterCnt < sFilterApplied.m_ushTotal; nAppFilterCnt++)
    {
        for(int nTempFilCnt = 0; nTempFilCnt < sTempAppliedFilter.m_ushTotal; nTempFilCnt++ )
        {
            if((&sTempAppliedFilter.m_psFilters[nTempFilCnt]) != nullptr)
            {
                if(sFilterApplied.m_psFilters[nAppFilterCnt].m_sFilterName.m_acFilterName ==
                        sTempAppliedFilter.m_psFilters[nTempFilCnt].m_sFilterName.m_acFilterName)
                {
                    ((sFilterApplied.m_psFilters)+ nAppFilterCnt) ->m_bEnabled
                        =  ((sTempAppliedFilter.m_psFilters)+ nTempFilCnt) ->m_bEnabled;
                }
            }
        }
    }
}
static void vPopulateFilterApplied(const SFILTERAPPLIED_CAN* psFilterConfigured, SFILTERAPPLIED_CAN& sFilterApplied, CMainEntryList& SrcList)
{
    const SMAINENTRY& sMainEntry = SrcList.GetHead();
    int nCount  = (int)sMainEntry.m_odSelEntryList.GetCount();
    sFilterApplied.vClear();
    sFilterApplied.m_psFilters = new SFILTERSET[nCount];

    POSITION pos = sMainEntry.m_odSelEntryList.GetHeadPosition();
    while (pos)
    {
        SSUBENTRY sSubEntry = sMainEntry.m_odSelEntryList.GetNext(pos);
        const PSFILTERSET psTemp = SFILTERSET::psGetFilterSetPointer(psFilterConfigured->m_psFilters,
                                   psFilterConfigured->m_ushTotal, sSubEntry.m_omSubEntryName.GetBuffer(MAX_PATH));
        ASSERT (psTemp != NULL);
        sFilterApplied.m_psFilters[sFilterApplied.m_ushTotal].bClone(*psTemp);
        sFilterApplied.m_ushTotal++;
    }
}