⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfc.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Boost.Range MFC Extension//// Copyright Shunsuke Sogame 2005-2006.// Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt)#include <afx.h> // must be here// #include <pstade/vodka/drink.hpp>#include <boost/test/test_tools.hpp>#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS#define _ATL_NO_AUTOMATIC_NAMESPACE#define BOOST_LIB_NAME boost_test_exec_monitor#include <boost/config/auto_link.hpp>#define BOOST_RANGE_DETAIL_MICROSOFT_TEST#include <boost/range/mfc.hpp> // can be placed first#include <map>#include <boost/concept_check.hpp>// #include <boost/foreach.hpp>#include <boost/range/begin.hpp>#include <boost/range/concepts.hpp>#include <boost/range/end.hpp>#include <boost/static_assert.hpp>#include <boost/algorithm/string.hpp>#include <afx.h>#include <afxcoll.h>#include <afxtempl.h>#if !(_ATL_VER < 0x0700)    #include <cstringt.h>    #include <atlsimpstr.h>    #include <atlstr.h>#endifnamespace brdm = boost::range_detail_microsoft;// helpers//template< class MfcMapT, class MapT >bool test_mfc_map(MfcMapT& map, const MapT& sample){    typedef typename boost::range_iterator<MfcMapT>::type iter_t;    typedef typename boost::range_const_iterator<MapT>::type siter_t;    bool result = true;    result = result && (boost::distance(map) == boost::distance(sample));    if (!result)        return false;    {        for (iter_t it = boost::begin(map), last = boost::end(map); it != last; ++it) {            result = result && brdm::test_find_key_and_mapped(sample, *it);        }    }    {        for (siter_t it = boost::begin(sample), last = boost::end(sample); it != last; ++it) {            result = result && (map[it->first] == it->second);        }    }    return result;}template< class MfcMapT, class MapT >bool test_mfc_cpair_map(MfcMapT& map, const MapT& sample){    typedef typename boost::range_iterator<MfcMapT>::type iter_t;    typedef typename boost::range_const_iterator<MapT>::type siter_t;    bool result = true;    result = result && (boost::distance(map) == boost::distance(sample));    if (!result)        return false;    {        for (iter_t it = boost::begin(map), last = boost::end(map); it != last; ++it) {            result = result && brdm::test_find_key_and_mapped(sample, std::make_pair(it->key, it->value));        }    }    {        for (siter_t it = boost::begin(sample), last = boost::end(sample); it != last; ++it) {            result = result && (map[it->first] == it->second);        }    }    return result;}// arrays//template< class Range >void test_CByteArray(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CByteArray rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter<rng_t, BYTE *>::value ));    BOOST_STATIC_ASSERT(( brdm::test_const_iter  <rng_t, BYTE const*>::value ));    rng_t rng;    BOOST_CHECK( brdm::test_init_array(rng, sample) );    BOOST_CHECK( brdm::test_random_access(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class Range >void test_CDWordArray(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CDWordArray rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter<rng_t, DWORD *>::value ));    BOOST_STATIC_ASSERT(( brdm::test_const_iter  <rng_t, DWORD const*>::value ));    rng_t rng;    BOOST_CHECK( brdm::test_init_array(rng, sample) );    BOOST_CHECK( brdm::test_random_access(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class Range >void test_CObArray(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CObArray rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter<rng_t, brdm::mfc_ptr_array_iterator<rng_t, ::CObject *> >::value ));    BOOST_STATIC_ASSERT(( brdm::test_const_iter  <rng_t, brdm::mfc_ptr_array_iterator<const rng_t, const ::CObject *> >::value ));    rng_t rng;    BOOST_CHECK( brdm::test_init_array(rng, sample) );    BOOST_CHECK( brdm::test_random_access(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class Range >void test_CPtrArray(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CPtrArray rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter<rng_t, brdm::mfc_ptr_array_iterator<rng_t, void *> >::value ));    BOOST_STATIC_ASSERT(( brdm::test_const_iter  <rng_t, brdm::mfc_ptr_array_iterator<const rng_t, const void *> >::value ));    rng_t rng;    BOOST_CHECK( brdm::test_init_array(rng, sample) );    BOOST_CHECK( brdm::test_random_access(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class Range >void test_CStringArray(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CStringArray rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter<rng_t, ::CString *>::value ));    BOOST_STATIC_ASSERT(( brdm::test_const_iter  <rng_t, ::CString const *>::value ));    rng_t rng;    BOOST_CHECK( brdm::test_init_array(rng, sample) );    BOOST_CHECK( brdm::test_random_access(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class Range >void test_CUIntArray(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CUIntArray rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter<rng_t, UINT *>::value ));    BOOST_STATIC_ASSERT(( brdm::test_const_iter  <rng_t, UINT const *>::value ));    rng_t rng;    BOOST_CHECK( brdm::test_init_array(rng, sample) );    BOOST_CHECK( brdm::test_random_access(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class Range >void test_CWordArray(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CWordArray rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter<rng_t, WORD *>::value ));    BOOST_STATIC_ASSERT(( brdm::test_const_iter  <rng_t, WORD const *>::value ));    rng_t rng;    BOOST_CHECK( brdm::test_init_array(rng, sample) );    BOOST_CHECK( brdm::test_random_access(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}// lists//template< class Range >void test_CObList(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CObList rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter< rng_t, brdm::list_iterator<rng_t,       ::CObject *> >::value ));#if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)    BOOST_STATIC_ASSERT(( brdm::test_const_iter  < rng_t, brdm::list_iterator<rng_t const, ::CObject const *> >::value ));#else    BOOST_STATIC_ASSERT(( brdm::test_const_iter  < rng_t, brdm::list_iterator<rng_t const, ::CObject const * const, ::CObject const * const> >::value ));#endif    rng_t rng;    BOOST_CHECK( brdm::test_init_list(rng, sample) );    BOOST_CHECK( brdm::test_bidirectional(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class Range >void test_CPtrList(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CPtrList rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter< rng_t, brdm::list_iterator<rng_t,       void *> >::value ));#if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)    BOOST_STATIC_ASSERT(( brdm::test_const_iter  < rng_t, brdm::list_iterator<rng_t const, void const *> >::value ));#else    BOOST_STATIC_ASSERT(( brdm::test_const_iter  < rng_t, brdm::list_iterator<rng_t const, void const * const, void const * const> >::value ));#endif    rng_t rng;    BOOST_CHECK( brdm::test_init_list(rng, sample) );    BOOST_CHECK( brdm::test_bidirectional(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class Range >void test_CStringList(const Range& sample){    typedef typename boost::range_value<Range>::type val_t;    typedef ::CStringList rng_t;    BOOST_STATIC_ASSERT(( brdm::test_mutable_iter< rng_t, brdm::list_iterator<rng_t,       ::CString> >::value ));#if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)    BOOST_STATIC_ASSERT(( brdm::test_const_iter  < rng_t, brdm::list_iterator<rng_t const, ::CString const> >::value ));#else    BOOST_STATIC_ASSERT(( brdm::test_const_iter  < rng_t, brdm::list_iterator<rng_t const, ::CString const, ::CString const> >::value ));#endif    rng_t rng;    BOOST_CHECK( brdm::test_init_list(rng, sample) );    BOOST_CHECK( brdm::test_bidirectional(rng) );    BOOST_CHECK( brdm::test_emptiness(rng) );}// maps//template< class MapT >void test_CMapPtrToWord(const MapT& sample){    typedef ::CMapPtrToWord rng_t;    rng_t rng;    boost::function_requires< boost::ForwardRangeConcept<rng_t> >();    BOOST_CHECK( brdm::test_init_map(rng, sample) );    BOOST_CHECK( ::test_mfc_map(rng, sample) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class MapT >void test_CMapPtrToPtr(const MapT& sample){    typedef ::CMapPtrToPtr rng_t;    rng_t rng;    boost::function_requires< boost::ForwardRangeConcept<rng_t> >();    BOOST_CHECK( brdm::test_init_map(rng, sample) );    BOOST_CHECK( ::test_mfc_map(rng, sample) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class MapT >void test_CMapStringToOb(const MapT& sample){    typedef ::CMapStringToOb rng_t;    rng_t rng;    boost::function_requires< boost::ForwardRangeConcept<rng_t> >();    BOOST_CHECK( brdm::test_init_map(rng, sample) );    BOOST_CHECK( ::test_mfc_map(rng, sample) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class MapT >void test_CMapStringToPtr(const MapT& sample){    typedef ::CMapStringToPtr rng_t;    rng_t rng;    boost::function_requires< boost::ForwardRangeConcept<rng_t> >();    BOOST_CHECK( brdm::test_init_map(rng, sample) );    BOOST_CHECK( ::test_mfc_map(rng, sample) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class MapT >void test_CMapStringToString(const MapT& sample){    typedef ::CMapStringToString rng_t;    rng_t rng;    boost::function_requires< boost::ForwardRangeConcept<rng_t> >();    BOOST_CHECK( brdm::test_init_map(rng, sample) );#if !defined(BOOST_RANGE_MFC_NO_CPAIR)    BOOST_CHECK( ::test_mfc_cpair_map(rng, sample) );#endif    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class MapT >void test_CMapWordToOb(const MapT& sample){    typedef ::CMapWordToOb rng_t;    rng_t rng;    boost::function_requires< boost::ForwardRangeConcept<rng_t> >();    BOOST_CHECK( brdm::test_init_map(rng, sample) );    BOOST_CHECK( ::test_mfc_map(rng, sample) );    BOOST_CHECK( brdm::test_emptiness(rng) );}template< class MapT >void test_CMapWordToPtr(const MapT& sample){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -