📄 mfc.cpp
字号:
// 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 + -