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). |
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)); ... } }
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.
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.
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.