Esempio n. 1
0
// 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();
		}
	}
}
Esempio n. 2
0
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 );
             }
     }
 }
Esempio n. 5
0
	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);

	}
Esempio n. 6
0
// 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);
	}
}
Esempio n. 7
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 );
        }
    }
}
Esempio n. 9
0
	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
		}

	}
Esempio n. 10
0
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