DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
#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
Page URL
File URL
Prev
18/30
Next
Download
( 24 KB )
Note: The DriveHQ service banners will NOT be displayed if the file owner is a paid member.
Comments
Total ratings:
0
Average rating:
Not Rated
Would you like to comment?
Join DriveHQ
for a free account, or
Logon
if you are already a member.