10 KiB
Range MFC/ATL Extension
- Author
- Shunsuke Sogame
- Contact
- mb2act@yahoo.co.jp
- date
- 26th of May 2006
- copyright
- Shunsuke Sogame 2005-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt).
Overview
Boost.Range MFC/ATL Extension provides Boost.Range support for MFC/ATL collection and string types.
CTypedPtrArray<CPtrArray, CList<CString> *> myArray; ... BOOST_FOREACH (CList<CString> *theList, myArray) { BOOST_FOREACH (CString& str, *theList) { boost::to_upper(str); std::sort(boost::begin(str), boost::end(str)); ... } }
Requirements
- Boost C++ Libraries Version 1.34.0 or later (no compilation required)
- Visual C++ 7.1 or Visual C++ 8.0
MFC Ranges
If the <boost/range/mfc.hpp> is included before or
after Boost.Range headers, the MFC
collections and strings become models of Range. The table below lists
the Traversal Category and range_reference of MFC
ranges.
Range |
Traversal Category | range_reference<Range>::type |
|---|---|---|
CArray<T,A> |
Random Access | T& |
CList<T,A> |
Bidirectional | T& |
CMap<K,AK,M,AM> |
Forward | Range::CPair& |
CTypedPtrArray<B,T*> |
Random Access | T* const |
CTypedPtrList<B,T*> |
Bidirectional | T* const |
CTypedPtrMap<B,T*,V*> |
Forward | std::pair<T*,V*> const |
CByteArray |
Random Access | BYTE& |
CDWordArray |
Random Access | DWORD& |
CObArray |
Random Access | CObject* & |
CPtrArray |
Random Access | void* & |
CStringArray |
Random Access | CString& |
CUIntArray |
Random Access | UINT& |
CWordArray |
Random Access | WORD& |
CObList |
Bidirectional | CObject* & |
CPtrList |
Bidirectional | void* & |
CStringList |
Bidirectional | CString& |
CMapPtrToWord |
Forward | std::pair<void*,WORD> const |
CMapPtrToPtr |
Forward | std::pair<void*,void*> const |
CMapStringToOb |
Forward | std::pair<String,CObject*> const |
CMapStringToString |
Forward | Range::CPair& |
CMapWordToOb |
Forward | std::pair<WORD,CObject*> const |
CMapWordToPtr |
Forward | std::pair<WORD,void*> const |
Other Boost.Range metafunctions are
defined by the following. Let Range be any type listed
above and ReF be the same as
range_reference<Range>::type.
range_value<Range>::type is the same as
remove_reference<remove_const<Ref>::type>::type,
range_difference<Range>::type is the same as
std::ptrdiff_t, and
range_pointer<Range>::type is the same as
add_pointer<remove_reference<Ref>::type>::type.
As for const Range, see const
Ranges.
ATL Ranges
If the <boost/range/atl.hpp> is included before or
after Boost.Range headers, the ATL
collections and strings become models of Range. The table below lists
the Traversal Category and range_reference of ATL
ranges.
Range |
Traversal Category | range_reference<Range>::type |
|---|---|---|
CAtlArray<E,ET> |
Random Access | E& |
CAutoPtrArray<E> |
Random Access | E& |
CInterfaceArray<I,pi> |
Random Access | CComQIPtr<I,pi>& |
CAtlList<E,ET> |
Bidirectional | E& |
CAutoPtrList<E> |
Bidirectional | E& |
CHeapPtrList<E,A> |
Bidirectional | E& |
CInterfaceList<I,pi> |
Bidirectional | CComQIPtr<I,pi>& |
CAtlMap<K,V,KT,VT> |
Forward | Range::CPair& |
CRBTree<K,V,KT,VT> |
Bidirectional | Range::CPair& |
CRBMap<K,V,KT,VT> |
Bidirectional | Range::CPair& |
CRBMultiMap<K,V,KT,VT> |
Bidirectional | Range::CPair& |
CSimpleStringT<B,b> |
Random Access | B& |
CStringT<B,ST> |
Random Access | B& |
CFixedStringT<S,n> |
Random Access | range_reference<S>::type |
CStringT<B,ST> |
Random Access | B& |
CComBSTR |
Random Access | OLECHAR& |
CSimpleArray<T,TE> |
Random Access | T& |
Other Boost.Range metafunctions are
defined by the following. Let Range be any type listed
above and ReF be the same as
range_reference<Range>::type.
range_value<Range>::type is the same as
remove_reference<Ref>::type,
range_difference<Range>::type is the same as
std::ptrdiff_t, and
range_pointer<Range>::type is the same as
add_pointer<remove_reference<Ref>::type>::type.
As for const Range, see const
Ranges.
const Ranges
range_reference<const Range>::type is defined by
the following algorithm. Let Range be any type listed above
and ReF be the same as
range_reference<Range>::type.
- if (Range is CObArray || Range is CObList)
-
return CObject const * &
- else if (Range is CPtrArray || Range is CPtrList)
-
return void const * &
- else if (there is a type X such that X& is the same as ReF)
-
return X const &
- else if (there is a type X such that X* const is the same as ReF)
-
return X const * const
- else
-
return ReF
Other Boost.Range metafunctions are
defined by the following.
range_value<const Range>::type is the same as
range_value<Range>::type,
range_difference<const Range>::type is the same as
std::ptrdiff_t, and
range_pointer<const Range>::type is the same as
add_pointer<remove_reference<range_reference<const Range>::type>::type>::type.