KShieldDirectory* KShieldDirectoryTree::Find(PWSTR pwszFullPath, PVOID* ppUserContext, PVOID* ppParentUserContext) { KLocker locker(&m_KSynchroObject); KShieldDirectory* pParentItem; KShieldDirectory* pItem = FindFrom(m_pRoot, pwszFullPath, &pParentItem); if (pItem != NULL && pItem->m_pDirectoryInfo != NULL) { if (pItem->m_pDirectoryInfo->m_pUserContext != NULL) { if (ppUserContext != NULL) *ppUserContext = pItem->m_pDirectoryInfo->m_pUserContext; } else { pItem = NULL; } if (ppParentUserContext != NULL) { if (pParentItem != NULL && pParentItem->m_pDirectoryInfo != NULL) *ppParentUserContext = pParentItem->m_pDirectoryInfo->m_pUserContext; } } return pItem; }
void CUIStatsWnd::RemoveItemFrom(const u32 beg_pos, const char *strCaption) { if (CUIStatsListItem *pSLItem = FindFrom(beg_pos, strCaption)) { UIStatsList.RemoveItem(pSLItem->GetIndex()); } }
BOOLEAN KShieldDirectoryTree::Remove(PWSTR pwszFullPath, PVOID* ppUserContext) { KLocker locker(&m_KSynchroObject); BOOLEAN bRes = FALSE; KShieldDirectory* pItem = FindFrom(m_pRoot, pwszFullPath); if (pItem != NULL && pItem->m_pDirectoryInfo != NULL) { if (ppUserContext != NULL) *ppUserContext = pItem->m_pDirectoryInfo->m_pUserContext; if (pItem->m_pDirectoryInfo->m_pUserContext != NULL) { KShieldDirectory* pItemParent = pItem->m_pParentDirectory; while (pItemParent != NULL && pItem->m_pDirectoryInfo != NULL) { if (pItem->IsEmpty() == TRUE) { if (bRes == FALSE || pItem->m_pDirectoryInfo->m_pUserContext == NULL) { pItemParent->Remove(pItem->m_pDirectoryInfo->m_pwszName); if (bRes == FALSE) --(pItemParent->m_pDirectoryInfo->m_dwUserCount); bRes = TRUE; } else { break; } } else { if (bRes == FALSE) { pItem->m_pDirectoryInfo->m_pUserContext = NULL; --(pItemParent->m_pDirectoryInfo->m_dwUserCount); bRes = TRUE; } break; } pItem = pItemParent; pItemParent = pItem->m_pParentDirectory; } } } return bRes; }