// QueryColumns flags void CTagArrayEditor::OnEditAction1() { if (!m_lpContentsTable) return; HRESULT hRes = S_OK; ULONG ulQueryColumnFlags = NULL; CEditor MyData( this, IDS_QUERYCOLUMNS, IDS_QUERYCOLUMNSPROMPT, 1, CEDITOR_BUTTON_OK | CEDITOR_BUTTON_CANCEL); MyData.InitPane(0, CreateSingleLinePane(IDS_QUERYCOLUMNFLAGS, NULL, false)); MyData.SetHex(0, ulQueryColumnFlags); WC_H(MyData.DisplayDialog()); if (S_OK == hRes) { ulQueryColumnFlags = MyData.GetHex(0); LPSPropTagArray lpTagArray = NULL; EC_MAPI(m_lpContentsTable->QueryColumns( ulQueryColumnFlags, &lpTagArray)); if (SUCCEEDED(hRes)) { MAPIFreeBuffer(m_lpTagArray); m_lpTagArray = lpTagArray; ReadTagArrayToList(0); UpdateListButtons(); } } }
void CAclDlg::OnAddItem() { HRESULT hRes = S_OK; CEditor MyData( this, IDS_ACLADDITEM, IDS_ACLADDITEMPROMPT, 2, CEDITOR_BUTTON_OK|CEDITOR_BUTTON_CANCEL); MyData.SetPromptPostFix(AllFlagsToString(PROP_ID(PR_MEMBER_RIGHTS),true)); MyData.InitPane(0, CreateSingleLinePane(IDS_USEREID, NULL, false)); MyData.InitPane(1, CreateSingleLinePane(IDS_MASKINHEX, NULL, false)); MyData.SetHex(1,0); WC_H(MyData.DisplayDialog()); if (S_OK != hRes) { DebugPrint(DBGGeneric,_T("OnAddItem cancelled.\n")); return; } LPROWLIST lpNewItem = NULL; EC_H(MAPIAllocateBuffer(CbNewROWLIST(1),(LPVOID*) &lpNewItem)); if (lpNewItem) { lpNewItem->cEntries = 1; lpNewItem->aEntries[0].ulRowFlags = ROW_ADD; lpNewItem->aEntries[0].cValues = 2; lpNewItem->aEntries[0].rgPropVals = 0; EC_H(MAPIAllocateMore(2 * sizeof(SPropValue), lpNewItem, (LPVOID*)&lpNewItem->aEntries[0].rgPropVals)); if (lpNewItem->aEntries[0].rgPropVals) { LPENTRYID lpEntryID = NULL; size_t cbBin = 0; EC_H(MyData.GetEntryID(0, false, &cbBin, &lpEntryID)); lpNewItem->aEntries[0].rgPropVals[0].ulPropTag = PR_MEMBER_ENTRYID; lpNewItem->aEntries[0].rgPropVals[0].Value.bin.cb = (ULONG)cbBin; lpNewItem->aEntries[0].rgPropVals[0].Value.bin.lpb = (LPBYTE)lpEntryID; lpNewItem->aEntries[0].rgPropVals[1].ulPropTag = PR_MEMBER_RIGHTS; lpNewItem->aEntries[0].rgPropVals[1].Value.ul = MyData.GetHex(1); EC_MAPI(m_lpExchTbl->ModifyTable( m_ulTableFlags, lpNewItem)); MAPIFreeBuffer(lpNewItem); if (S_OK == hRes) OnRefreshView(); delete[] lpEntryID; } } } // CAclDlg::OnAddItem
void read ( const FileNode& node, MyData& x, const MyData& default_value = MyData ( ) ) { if ( node.empty ( ) ) { x = default_value; } else { x.read ( node ); } }
static void apply( MyTable& table, int i ) { if( UseKey(i) ) { if( i&4 ) { MyTable::accessor a; table.insert( a, MyKey::make(i) ); if( i&1 ) (*a).second.set_value(i*i); else a->second.set_value(i*i); } else if( i&1 ) { MyTable::accessor a; table.insert( a, std::make_pair(MyKey::make(i), MyData(i*i)) ); ASSERT( (*a).second.value_of()==i*i, NULL ); } else { MyTable::const_accessor ca; table.insert( ca, std::make_pair(MyKey::make(i), MyData(i*i)) ); ASSERT( ca->second.value_of()==i*i, NULL ); } } }
TEST(DrawList, draw) { DrawList<MyData> list; list.push_back(MyData(0,1), 0.1); list.push_back(MyData(1,2), 0.1); list.push_back(MyData(2,3), 0.1); list.push_back(MyData(3,4), 0.1); list.push_back(MyData(4,6), 0.2); list.push_back(MyData(6,10), 0.4); ASSERT_EQ(0, list.draw(0.00).x); ASSERT_EQ(0, list.draw(0.05).x); ASSERT_EQ(0, list.draw(0.09).x); ASSERT_EQ(1, list.draw(0.11).x); ASSERT_EQ(1, list.draw(0.15).x); ASSERT_EQ(1, list.draw(0.19).x); ASSERT_EQ(2, list.draw(0.201).x); ASSERT_EQ(2, list.draw(0.25).x); ASSERT_EQ(2, list.draw(0.299).x); ASSERT_EQ(3, list.draw(0.30001).x); ASSERT_EQ(3, list.draw(0.3333).x); ASSERT_EQ(3, list.draw(0.399999).x); ASSERT_EQ(4, list.draw(0.40001).x); ASSERT_EQ(4, list.draw(0.4333).x); ASSERT_EQ(4, list.draw(0.599999).x); ASSERT_EQ(6, list.draw(0.600001).x); ASSERT_EQ(6, list.draw(0.7).x); ASSERT_EQ(6, list.draw(0.999999).x); }
// SetColumns flags void CTagArrayEditor::OnEditAction2() { if (!m_lpContentsTable) return; HRESULT hRes = S_OK; CEditor MyData( this, IDS_SETCOLUMNS, IDS_SETCOLUMNSPROMPT, 1, CEDITOR_BUTTON_OK | CEDITOR_BUTTON_CANCEL); MyData.InitPane(0, CreateSingleLinePane(IDS_SETCOLUMNFLAGS, NULL, false)); MyData.SetHex(0, m_ulSetColumnsFlags); WC_H(MyData.DisplayDialog()); if (S_OK == hRes) { m_ulSetColumnsFlags = MyData.GetHex(0); } }
/** assert that cumulative values are correctly calculated when drawing the first time */ TEST(DrawList, Cumulative) { DrawList<MyData> list; list.push_back(MyData(), 0.11); list.push_back(MyData(), 0.22); list.push_back(MyData(), 0.33); list.push_back(MyData(), 0.44); list.push_back(MyData(), 0.55); list.push_back(MyData(), 0.66); for (DrawListEntry<MyData>& dle : list.entries) { ASSERT_EQ(0, dle.cumulativeProbability); } list.draw(); ASSERT_FLOAT_EQ(0.11f, list.entries[0].cumulativeProbability); ASSERT_FLOAT_EQ(0.33f, list.entries[1].cumulativeProbability); ASSERT_FLOAT_EQ(0.66f, list.entries[2].cumulativeProbability); ASSERT_FLOAT_EQ(1.10f, list.entries[3].cumulativeProbability); ASSERT_FLOAT_EQ(1.65f, list.entries[4].cumulativeProbability); ASSERT_FLOAT_EQ(2.31f, list.entries[5].cumulativeProbability); list.set(0, MyData(), 0.22); ASSERT_FLOAT_EQ(0.00f, list.entries[0].cumulativeProbability); ASSERT_FLOAT_EQ(0.33f, list.entries[1].cumulativeProbability); ASSERT_FLOAT_EQ(0.66f, list.entries[2].cumulativeProbability); ASSERT_FLOAT_EQ(1.10f, list.entries[3].cumulativeProbability); ASSERT_FLOAT_EQ(1.65f, list.entries[4].cumulativeProbability); ASSERT_FLOAT_EQ(2.31f, list.entries[5].cumulativeProbability); list.draw(); ASSERT_FLOAT_EQ(0.22f, list.entries[0].cumulativeProbability); ASSERT_FLOAT_EQ(0.44f, list.entries[1].cumulativeProbability); ASSERT_FLOAT_EQ(0.77f, list.entries[2].cumulativeProbability); ASSERT_FLOAT_EQ(1.21f, list.entries[3].cumulativeProbability); ASSERT_FLOAT_EQ(1.76f, list.entries[4].cumulativeProbability); ASSERT_FLOAT_EQ(2.42f, list.entries[5].cumulativeProbability); }
void TestRehash() { REMARK("testing rehashing\n"); MyTable w; w.insert( std::make_pair(MyKey::make(-5), MyData()) ); w.rehash(); // without this, assertion will fail MyTable::iterator it = w.begin(); int i = 0; // check for non-rehashed buckets for( ; it != w.end(); i++ ) w.count( (it++)->first ); ASSERT( i == 1, NULL ); for( i=0; i<1000; i=(i<29 ? i+1 : i*2) ) { for( int j=max(256+i, i*2); j<10000; j*=3 ) { MyTable v; FillTable( v, i ); ASSERT(int(v.size()) == i, NULL); ASSERT(int(v.bucket_count()) <= j, NULL); v.rehash( j ); ASSERT(int(v.bucket_count()) >= j, NULL); CheckTable( v, i ); } } }
void TestDrawListRandom(int numEntries) { DrawList<MyData> list; std::vector<double> configured; std::vector<double> drawn; const unsigned int cnt = numEntries; const unsigned int numDraw = cnt * 4096; double probSum = 0; list.resize(cnt); drawn.resize(cnt); configured.resize(cnt); // fill for (unsigned int i = 0; i < cnt; ++i) { double rnd = double(rand()) / double(RAND_MAX); configured[i] = rnd; list.set(i, MyData(i,i), rnd); probSum += rnd; } // draw for (unsigned int i = 0; i < numDraw; ++i) { MyData& d = list.draw(); drawn[d.x]++; } // compare for (unsigned int i = 0; i < cnt; ++i) { double a = (configured[i] / probSum); double b = (drawn[i] / numDraw); ASSERT_NEAR(a, b, a*0.50); // allow 50% difference between cfg and drawn } }
void CBaseDialog::OnNotificationsOn() { HRESULT hRes = S_OK; if (m_lpBaseAdviseSink || !m_lpMapiObjects) return; LPMDB lpMDB = m_lpMapiObjects->GetMDB(); // do not release LPMAPISESSION lpMAPISession = m_lpMapiObjects->GetSession(); // do not release LPADRBOOK lpAB = m_lpMapiObjects->GetAddrBook(false); // do not release CEditor MyData( this, IDS_NOTIFICATIONS, IDS_NOTIFICATIONSPROMPT, 3, CEDITOR_BUTTON_OK | CEDITOR_BUTTON_CANCEL); MyData.SetPromptPostFix(AllFlagsToString(flagNotifEventType, true)); MyData.InitPane(0, CreateSingleLinePane(IDS_EID, NULL, false)); MyData.InitPane(1, CreateSingleLinePane(IDS_ULEVENTMASK, NULL, false)); MyData.SetHex(1, fnevNewMail); UINT uidDropDown[] = { IDS_DDMESSAGESTORE, IDS_DDSESSION, IDS_DDADDRESSBOOK }; MyData.InitPane(2, CreateDropDownPane(IDS_OBJECTFORADVISE, _countof(uidDropDown), uidDropDown, true)); WC_H(MyData.DisplayDialog()); if (S_OK == hRes) { if ((0 == MyData.GetDropDown(2) && !lpMDB) || (1 == MyData.GetDropDown(2) && !lpMAPISession) || (2 == MyData.GetDropDown(2) && !lpAB)) { ErrDialog(__FILE__, __LINE__, IDS_EDADVISE); return; } LPENTRYID lpEntryID = NULL; size_t cbBin = NULL; WC_H(MyData.GetEntryID(0, false, &cbBin, &lpEntryID)); // don't actually care if the returning lpEntryID is NULL - Advise can work with that m_lpBaseAdviseSink = new CAdviseSink(m_hWnd, NULL); if (m_lpBaseAdviseSink) { switch (MyData.GetDropDown(2)) { case 0: EC_MAPI(lpMDB->Advise( (ULONG)cbBin, lpEntryID, MyData.GetHex(1), (IMAPIAdviseSink *)m_lpBaseAdviseSink, &m_ulBaseAdviseConnection)); m_lpBaseAdviseSink->SetAdviseTarget(lpMDB); m_ulBaseAdviseObjectType = MAPI_STORE; break; case 1: EC_MAPI(lpMAPISession->Advise( (ULONG)cbBin, lpEntryID, MyData.GetHex(1), (IMAPIAdviseSink *)m_lpBaseAdviseSink, &m_ulBaseAdviseConnection)); m_ulBaseAdviseObjectType = MAPI_SESSION; break; case 2: EC_MAPI(lpAB->Advise( (ULONG)cbBin, lpEntryID, MyData.GetHex(1), (IMAPIAdviseSink *)m_lpBaseAdviseSink, &m_ulBaseAdviseConnection)); m_lpBaseAdviseSink->SetAdviseTarget(lpAB); m_ulBaseAdviseObjectType = MAPI_ADDRBOOK; break; } if (SUCCEEDED(hRes)) { if (0 == MyData.GetDropDown(2) && lpMDB) { // Try to trigger some RPC to get the notifications going LPSPropValue lpProp = NULL; WC_MAPI(HrGetOneProp( lpMDB, PR_TEST_LINE_SPEED, &lpProp)); if (MAPI_E_NOT_FOUND == hRes) { // We're not on an Exchange server. We don't need to generate RPC after all. hRes = S_OK; } MAPIFreeBuffer(lpProp); } } else // if we failed to advise, then we don't need the advise sink object { if (m_lpBaseAdviseSink) m_lpBaseAdviseSink->Release(); m_lpBaseAdviseSink = NULL; m_ulBaseAdviseObjectType = NULL; m_ulBaseAdviseConnection = NULL; } } delete[] lpEntryID; } } // CBaseDialog::OnNotificationsOn