x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
mfc.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\range\mfc.hpp
旋转
特效
属性
历史版本
#ifndef BOOST_RANGE_MFC_HPP #define BOOST_RANGE_MFC_HPP // 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) // config // #include
// _MFC_VER #if !defined(BOOST_RANGE_MFC_NO_CPAIR) #if (_MFC_VER < 0x0700) // dubious #define BOOST_RANGE_MFC_NO_CPAIR #endif #endif #if !defined(BOOST_RANGE_MFC_HAS_LEGACY_STRING) #if (_MFC_VER < 0x0700) // dubious #define BOOST_RANGE_MFC_HAS_LEGACY_STRING #endif #endif // A const collection of old MFC doesn't return const reference. // #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF) #if (_MFC_VER < 0x0700) // dubious #define BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF #endif #endif // forward declarations // template< class Type, class ArgType > class CArray; template< class Type, class ArgType > class CList; template< class Key, class ArgKey, class Mapped, class ArgMapped > class CMap; template< class BaseClass, class PtrType > class CTypedPtrArray; template< class BaseClass, class PtrType > class CTypedPtrList; template< class BaseClass, class KeyPtrType, class MappedPtrType > class CTypedPtrMap; // extended customizations // #include
// ptrdiff_t #include
// pair #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// legacy CString #include
// CXXXArray, CXXXList, CMapXXXToXXX #include
namespace boost { namespace range_detail_microsoft { // mfc_ptr_array_iterator // // 'void **' is not convertible to 'void const **', // so we define... // template< class ArrayT, class PtrType > struct mfc_ptr_array_iterator; template< class ArrayT, class PtrType > struct mfc_ptr_array_iterator_super { typedef iterator_adaptor< mfc_ptr_array_iterator
, std::ptrdiff_t, // Base! PtrType, // Value random_access_traversal_tag, use_default, std::ptrdiff_t // Difference > type; }; template< class ArrayT, class PtrType > struct mfc_ptr_array_iterator : mfc_ptr_array_iterator_super
::type { private: typedef mfc_ptr_array_iterator self_t; typedef typename mfc_ptr_array_iterator_super
::type super_t; typedef typename super_t::reference ref_t; public: explicit mfc_ptr_array_iterator() { } explicit mfc_ptr_array_iterator(ArrayT& arr, INT_PTR index) : super_t(index), m_parr(boost::addressof(arr)) { } template< class, class > friend struct mfc_ptr_array_iterator; template< class ArrayT_, class PtrType_ > mfc_ptr_array_iterator(mfc_ptr_array_iterator
const& other) : super_t(other.base()), m_parr(other.m_parr) { } private: ArrayT *m_parr; friend class iterator_core_access; ref_t dereference() const { BOOST_ASSERT(0 <= this->base() && this->base() < m_parr->GetSize() && "out of range"); return *( m_parr->GetData() + this->base() ); } bool equal(self_t const& other) const { BOOST_ASSERT(m_parr == other.m_parr && "iterators incompatible"); return this->base() == other.base(); } }; struct mfc_ptr_array_functions { template< class Iterator, class X > Iterator begin(X& x) { return Iterator(x, 0); } template< class Iterator, class X > Iterator end(X& x) { return Iterator(x, x.GetSize()); } }; // arrays // template< > struct customization< ::CByteArray > : array_functions { template< class X > struct meta { typedef BYTE val_t; typedef val_t *mutable_iterator; typedef val_t const *const_iterator; }; }; template< > struct customization< ::CDWordArray > : array_functions { template< class X > struct meta { typedef DWORD val_t; typedef val_t *mutable_iterator; typedef val_t const *const_iterator; }; }; template< > struct customization< ::CObArray > : mfc_ptr_array_functions { template< class X > struct meta { typedef mfc_ptr_array_iterator
mutable_iterator; typedef mfc_ptr_array_iterator
const_iterator; }; }; template< > struct customization< ::CPtrArray > : mfc_ptr_array_functions { template< class X > struct meta { typedef mfc_ptr_array_iterator
mutable_iterator; typedef mfc_ptr_array_iterator
const_iterator; }; }; template< > struct customization< ::CStringArray > : array_functions { template< class X > struct meta { typedef ::CString val_t; typedef val_t *mutable_iterator; typedef val_t const *const_iterator; }; }; template< > struct customization< ::CUIntArray > : array_functions { template< class X > struct meta { typedef UINT val_t; typedef val_t *mutable_iterator; typedef val_t const *const_iterator; }; }; template< > struct customization< ::CWordArray > : array_functions { template< class X > struct meta { typedef WORD val_t; typedef val_t *mutable_iterator; typedef val_t const *const_iterator; }; }; // lists // template< > struct customization< ::CObList > : list_functions { template< class X > struct meta { typedef list_iterator
mutable_iterator; #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF) typedef list_iterator
const_iterator; #else typedef list_iterator
const_iterator; #endif }; }; template< > struct customization< ::CPtrList > : list_functions { template< class X > struct meta { typedef list_iterator
mutable_iterator; #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF) typedef list_iterator
const_iterator; #else typedef list_iterator
const_iterator; #endif }; }; template< > struct customization< ::CStringList > : list_functions { template< class X > struct meta { typedef ::CString val_t; typedef list_iterator
mutable_iterator; #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF) typedef list_iterator
const_iterator; #else typedef list_iterator
const_iterator; #endif }; }; // mfc_map_iterator // template< class MapT, class KeyT, class MappedT > struct mfc_map_iterator; template< class MapT, class KeyT, class MappedT > struct mfc_map_iterator_super { typedef iterator_facade< mfc_map_iterator
, std::pair
, forward_traversal_tag, std::pair
const > type; }; template< class MapT, class KeyT, class MappedT > struct mfc_map_iterator : mfc_map_iterator_super
::type { private: typedef mfc_map_iterator self_t; typedef typename mfc_map_iterator_super
::type super_t; typedef typename super_t::reference ref_t; public: explicit mfc_map_iterator() { } explicit mfc_map_iterator(MapT const& map, POSITION pos) : m_pmap(boost::addressof(map)), m_posNext(pos) { increment(); } explicit mfc_map_iterator(MapT const& map) : m_pmap(&map), m_pos(0) // end iterator { } template< class, class, class > friend struct mfc_map_iterator; template< class MapT_, class KeyT_, class MappedT_> mfc_map_iterator(mfc_map_iterator
const& other) : m_pmap(other.m_pmap), m_pos(other.m_pos), m_posNext(other.m_posNext), m_key(other.m_key), m_mapped(other.m_mapped) { } private: MapT const *m_pmap; POSITION m_pos, m_posNext; KeyT m_key; MappedT m_mapped; friend class iterator_core_access; ref_t dereference() const { BOOST_ASSERT(m_pos != 0 && "out of range"); return std::make_pair(m_key, m_mapped); } void increment() { BOOST_ASSERT(m_pos != 0 && "out of range"); if (m_posNext == 0) { m_pos = 0; return; } m_pos = m_posNext; m_pmap->GetNextAssoc(m_posNext, m_key, m_mapped); } bool equal(self_t const& other) const { BOOST_ASSERT(m_pmap == other.m_pmap && "iterators incompatible"); return m_pos == other.m_pos; } }; struct mfc_map_functions { template< class Iterator, class X > Iterator begin(X& x) { return Iterator(x, x.GetStartPosition()); } template< class Iterator, class X > Iterator end(X& x) { return Iterator(x); } }; #if !defined(BOOST_RANGE_MFC_NO_CPAIR) // mfc_cpair_map_iterator // // used by ::CMap and ::CMapStringToString // template< class MapT, class PairT > struct mfc_cpair_map_iterator; template< class MapT, class PairT > struct mfc_pget_map_iterator_super { typedef iterator_facade< mfc_cpair_map_iterator
, PairT, forward_traversal_tag > type; }; template< class MapT, class PairT > struct mfc_cpair_map_iterator : mfc_pget_map_iterator_super
::type { private: typedef mfc_cpair_map_iterator self_t; typedef typename mfc_pget_map_iterator_super
::type super_t; typedef typename super_t::reference ref_t; public: explicit mfc_cpair_map_iterator() { } explicit mfc_cpair_map_iterator(MapT& map, PairT *pp) : m_pmap(boost::addressof(map)), m_pp(pp) { } template< class, class > friend struct mfc_cpair_map_iterator; template< class MapT_, class PairT_> mfc_cpair_map_iterator(mfc_cpair_map_iterator
const& other) : m_pmap(other.m_pmap), m_pp(other.m_pp) { } private: MapT *m_pmap; PairT *m_pp; friend class iterator_core_access; ref_t dereference() const { BOOST_ASSERT(m_pp != 0 && "out of range"); return *m_pp; } void increment() { BOOST_ASSERT(m_pp != 0 && "out of range"); m_pp = m_pmap->PGetNextAssoc(m_pp); } bool equal(self_t const& other) const { BOOST_ASSERT(m_pmap == other.m_pmap && "iterators incompatible"); return m_pp == other.m_pp; } }; struct mfc_cpair_map_functions { template< class Iterator, class X > Iterator begin(X& x) { // Workaround: // Assertion fails if empty. // MFC document is wrong. #if !defined(NDEBUG) if (x.GetCount() == 0) return Iterator(x, 0); #endif return Iterator(x, x.PGetFirstAssoc()); } template< class Iterator, class X > Iterator end(X& x) { return Iterator(x, 0); } }; #endif // !defined(BOOST_RANGE_MFC_NO_CPAIR) // maps // template< > struct customization< ::CMapPtrToWord > : mfc_map_functions { template< class X > struct meta { typedef void *key_t; typedef WORD mapped_t; typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; }; }; template< > struct customization< ::CMapPtrToPtr > : mfc_map_functions { template< class X > struct meta { typedef void *key_t; typedef void *mapped_t; typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; }; }; template< > struct customization< ::CMapStringToOb > : mfc_map_functions { template< class X > struct meta { typedef ::CString key_t; typedef ::CObject *mapped_t; typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; }; }; template< > struct customization< ::CMapStringToPtr > : mfc_map_functions { template< class X > struct meta { typedef ::CString key_t; typedef void *mapped_t; typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; }; }; template< > struct customization< ::CMapStringToString > : #if !defined(BOOST_RANGE_MFC_NO_CPAIR) mfc_cpair_map_functions #else mfc_map_functions #endif { template< class X > struct meta { #if !defined(BOOST_RANGE_MFC_NO_CPAIR) typedef typename X::CPair pair_t; typedef mfc_cpair_map_iterator
mutable_iterator; typedef mfc_cpair_map_iterator
const_iterator; #else typedef ::CString key_t; typedef ::CString mapped_t; typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; #endif }; }; template< > struct customization< ::CMapWordToOb > : mfc_map_functions { template< class X > struct meta { typedef WORD key_t; typedef ::CObject *mapped_t; typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; }; }; template< > struct customization< ::CMapWordToPtr > : mfc_map_functions { template< class X > struct meta { typedef WORD key_t; typedef void *mapped_t; typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; }; }; // templates // template< class Type, class ArgType > struct customization< ::CArray
> : array_functions { template< class X > struct meta { typedef Type val_t; typedef val_t *mutable_iterator; typedef val_t const *const_iterator; }; }; template< class Type, class ArgType > struct customization< ::CList
> : list_functions { template< class X > struct meta { typedef Type val_t; typedef list_iterator
mutable_iterator; #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF) typedef list_iterator
const_iterator; #else typedef list_iterator
const_iterator; #endif }; }; template< class Key, class ArgKey, class Mapped, class ArgMapped > struct customization< ::CMap
> : #if !defined(BOOST_RANGE_MFC_NO_CPAIR) mfc_cpair_map_functions #else mfc_map_functions #endif { template< class X > struct meta { #if !defined(BOOST_RANGE_MFC_NO_CPAIR) typedef typename X::CPair pair_t; typedef mfc_cpair_map_iterator
mutable_iterator; typedef mfc_cpair_map_iterator
const_iterator; #else typedef Key key_t; typedef Mapped mapped_t; typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; #endif }; }; template< class BaseClass, class PtrType > struct customization< ::CTypedPtrArray
> { template< class X > struct fun { typedef typename remove_pointer
::type val_t; typedef typename mpl::if_< is_const
, val_t const, val_t >::type val_t_; typedef val_t_ * const result_type; template< class PtrType_ > result_type operator()(PtrType_ p) const { return static_cast
(p); } }; template< class X > struct meta { typedef typename compatible_mutable_iterator
::type miter_t; typedef typename range_const_iterator
::type citer_t; typedef transform_iterator
, miter_t> mutable_iterator; typedef transform_iterator
, citer_t> const_iterator; }; template< class Iterator, class X > Iterator begin(X& x) { return Iterator(boost::begin
(x), fun
()); } template< class Iterator, class X > Iterator end(X& x) { return Iterator(boost::end
(x), fun
()); } }; template< class BaseClass, class PtrType > struct customization< ::CTypedPtrList
> : list_functions { template< class X > struct meta { typedef typename remove_pointer
::type val_t; // not l-value typedef list_iterator
mutable_iterator; typedef list_iterator
const_iterator; }; }; template< class BaseClass, class KeyPtrType, class MappedPtrType > struct customization< ::CTypedPtrMap
> : mfc_map_functions { template< class X > struct meta { typedef mfc_map_iterator
mutable_iterator; typedef mutable_iterator const_iterator; }; }; // strings // #if defined(BOOST_RANGE_MFC_HAS_LEGACY_STRING) template< > struct customization< ::CString > { template< class X > struct meta { // LPTSTR/LPCTSTR is not always defined in
. typedef TCHAR *mutable_iterator; typedef TCHAR const *const_iterator; }; template< class Iterator, class X > typename mutable_
::type begin(X& x) { return x.GetBuffer(0); } template< class Iterator, class X > Iterator begin(X const& x) { return x; } template< class Iterator, class X > Iterator end(X& x) { return begin
(x) + x.GetLength(); } }; #endif // defined(BOOST_RANGE_MFC_HAS_LEGACY_STRING) } } // namespace boost::range_detail_microsoft // range customizations // // arrays // BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CByteArray ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CDWordArray ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CStringArray ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CUIntArray ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CWordArray ) // lists // BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CObList ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CPtrList ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CStringList ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CObArray ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CPtrArray ) // maps // BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CMapPtrToWord ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CMapPtrToPtr ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CMapStringToOb ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CMapStringToPtr ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CMapStringToString ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CMapWordToOb ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CMapWordToPtr ) // templates // BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CArray, 2 ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CList, 2 ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CMap, 4 ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CTypedPtrArray, 2 ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CTypedPtrList, 2 ) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TEMPLATE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CTypedPtrMap, 3 ) // strings // #if defined(BOOST_RANGE_MFC_HAS_LEGACY_STRING) BOOST_RANGE_DETAIL_MICROSOFT_CUSTOMIZATION_TYPE( boost::range_detail_microsoft::using_type_as_tag, BOOST_PP_NIL, CString ) #endif #endif
mfc.hpp
网页地址
文件地址
上一页
18/30
下一页
下载
( 24 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.