static void CheckConfTab (const CONF_ENTRY ConfTab[], const int nConfTab, const char sFile[]) { for (int i = 0; i < nConfTab; i++) // for each entry in ConfTab { const CONF_ENTRY *pEntry = ConfTab + i; switch (pEntry->Type) { case 'd': // double CheckEntry(*(double *)(pEntry->p), pEntry, sFile); break; case 'i': // int CheckEntry(*(int *)(pEntry->p), pEntry, sFile); break; case 'f': // bool (f for flag) CheckEntry(*(bool *)(pEntry->p) == 1, pEntry, sFile); break; case 'x': // hex case 's': // string // no check on these break; default: ASSERT(0); } } }
nsresult nsAbAutoCompleteSession::SearchPreviousResults(nsAbAutoCompleteSearchString *searchStr, nsIAutoCompleteResults *previousSearchResult, nsIAutoCompleteResults* results) { if (!previousSearchResult) return NS_ERROR_NULL_POINTER; nsXPIDLString prevSearchString; nsresult rv; rv = previousSearchResult->GetSearchString(getter_Copies(prevSearchString)); NS_ENSURE_SUCCESS(rv, rv); if (!(const PRUnichar*)prevSearchString || ((const PRUnichar*)prevSearchString)[0] == 0) return NS_ERROR_FAILURE; PRUint32 prevSearchStrLen = nsCRT::strlen(prevSearchString); if (searchStr->mFullStringLen < prevSearchStrLen || CommonPrefix(searchStr->mFullString, prevSearchString, prevSearchStrLen)) return NS_ERROR_ABORT; nsCOMPtr<nsISupportsArray> array; rv = previousSearchResult->GetItems(getter_AddRefs(array)); if (NS_SUCCEEDED(rv)) { PRUint32 nbrOfItems; PRUint32 i; PRUint32 pos; rv = array->Count(&nbrOfItems); if (NS_FAILED(rv) || nbrOfItems <= 0) return NS_ERROR_FAILURE; nsCOMPtr<nsISupports> item; nsCOMPtr<nsIAutoCompleteItem> resultItem; nsAbAutoCompleteParam *param; for (i = 0, pos = 0; i < nbrOfItems; i ++, pos ++) { rv = array->QueryElementAt(pos, NS_GET_IID(nsIAutoCompleteItem), getter_AddRefs(resultItem)); NS_ENSURE_SUCCESS(rv, rv); rv = resultItem->GetParam(getter_AddRefs(item)); NS_ENSURE_SUCCESS(rv, rv); if (!item) return NS_ERROR_FAILURE; param = (nsAbAutoCompleteParam *)(void *)item; if (CheckEntry(searchStr, param->mNickName, param->mDisplayName, param->mFirstName, param->mLastName, param->mEmailAddress)) AddToResult(param->mNickName, param->mDisplayName, param->mFirstName, param->mLastName, param->mEmailAddress, param->mNotes, param->mDirName, param->mPopularityIndex, param->mIsMailList, PR_FALSE, results); } return NS_OK; } return NS_ERROR_ABORT; }
NTSTATUS FilterBox::MatchEvent ( __in EventData *Event, __in PRTL_BITMAP Affecting ) { /// \todo добавить параметр - какие уже элементы проверялись и с каким результатом \ // для оптимизации при продолжении сканирования по списку параметров if ( IsListEmpty( &m_Items ) ) { return STATUS_SUCCESS; } NTSTATUS status = STATUS_SUCCESS; PBoxFilterItem pEntry = NULL; PLIST_ENTRY Flink = m_Items.Flink; while ( Flink != &m_Items ) { pEntry = CONTAINING_RECORD( Flink, BoxFilterItem, m_List ); Flink = Flink->Flink; if ( pEntry->m_Position > Affecting->SizeOfBitMap ) { __debugbreak(); //nct continue; } if ( !RtlCheckBit( Affecting, pEntry->m_Position ) ) { continue; } status = CheckEntry( pEntry->m_Param, Event ); if ( NT_SUCCESS( status ) ) { break; } } return status; }
nsresult nsAbAutoCompleteSession::SearchCards(nsIAbDirectory* directory, nsAbAutoCompleteSearchString* searchStr, nsIAutoCompleteResults* results) { nsresult rv; nsCOMPtr<nsIEnumerator> cardsEnumerator; nsCOMPtr<nsIAbCard> card; PRInt32 i; rv = directory->GetChildCards(getter_AddRefs(cardsEnumerator)); if (NS_SUCCEEDED(rv) && cardsEnumerator) { nsCOMPtr<nsISupports> item; for (rv = cardsEnumerator->First(); NS_SUCCEEDED(rv); rv = cardsEnumerator->Next()) { rv = cardsEnumerator->CurrentItem(getter_AddRefs(item)); if (NS_SUCCEEDED(rv)) { card = do_QueryInterface(item, &rv); if (NS_SUCCEEDED(rv)) { // Skip if it's not a normal card (ie, they can't be added as members). PRBool isNormal; rv = card->GetIsANormalCard(&isNormal); if (NS_FAILED(rv) || !isNormal) continue; nsXPIDLString pEmailStr[MAX_NUMBER_OF_EMAIL_ADDRESSES]; //[0]=primary email, [1]=secondary email (no available with mailing list) nsXPIDLString pDisplayNameStr; nsXPIDLString pFirstNameStr; nsXPIDLString pLastNameStr; nsXPIDLString pNickNameStr; nsXPIDLString pNotesStr; PRUint32 popularityIndex = 0; PRBool bIsMailList; rv = card->GetIsMailList(&bIsMailList); if (NS_FAILED(rv)) continue; if (bIsMailList) { rv = card->GetNotes(getter_Copies(pNotesStr)); if (NS_FAILED(rv)) continue; } else { for (i = 0 ; i < MAX_NUMBER_OF_EMAIL_ADDRESSES; i ++) { switch (i) { case 0: rv = card->GetPrimaryEmail(getter_Copies(pEmailStr[i])); break; case 1: rv = card->GetSecondEmail(getter_Copies(pEmailStr[i])); break; default: return NS_ERROR_FAILURE; } if (NS_FAILED(rv)) continue; // Don't bother with card without an email address if (pEmailStr[i].IsEmpty()) continue; //...and does it looks like a valid address? if (pEmailStr[i].FindChar('@') <= 0) pEmailStr[i].SetLength(0); } if (pEmailStr[0].IsEmpty() && pEmailStr[1].IsEmpty()) continue; } //Now, retrive the user name and nickname rv = card->GetDisplayName(getter_Copies(pDisplayNameStr)); if (NS_FAILED(rv)) continue; rv = card->GetFirstName(getter_Copies(pFirstNameStr)); if (NS_FAILED(rv)) continue; rv = card->GetLastName(getter_Copies(pLastNameStr)); if (NS_FAILED(rv)) continue; rv = card->GetNickName(getter_Copies(pNickNameStr)); if (NS_FAILED(rv)) continue; (void) card->GetPopularityIndex(&popularityIndex); // in the address book a mailing list does not have an email address field. However, // we do "fix up" mailing lists in the UI sometimes to look like "My List <My List>" // if we are looking up an address and we are comparing it to a mailing list to see if it is a match // instead of just looking for an exact match on "My List", hijack the unused email address field // and use that to test against "My List <My List>" if (bIsMailList) mParser->MakeFullAddressWString (pDisplayNameStr, pDisplayNameStr, getter_Copies(pEmailStr[0])); for (i = 0 ; i < MAX_NUMBER_OF_EMAIL_ADDRESSES; i ++) { if (!bIsMailList && pEmailStr[i].IsEmpty()) continue; if (CheckEntry(searchStr, pNickNameStr.get(), pDisplayNameStr.get(), pFirstNameStr.get(), pLastNameStr.get(), pEmailStr[i].get())) { nsXPIDLString pDirName; if (mAutoCompleteCommentColumn == 1) { rv = directory->GetDirName(getter_Copies(pDirName)); if (NS_FAILED(rv)) continue; } AddToResult(pNickNameStr.get(), pDisplayNameStr.get(), pFirstNameStr.get(), pLastNameStr.get(), pEmailStr[i].get(), pNotesStr.get(), pDirName.get(), popularityIndex, bIsMailList, PR_FALSE, results); } } } } } } return NS_OK; }