123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- ++++++++++++++++++++++++++++++++
- |Boost| Range MFC/ATL Extension
- ++++++++++++++++++++++++++++++++
- .. |Boost| image:: http://www.boost.org/libs/ptr_container/doc/boost.png
- :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__).
- __ http://www.boost.org/LICENSE_1_0.txt
- ========
- Overview
- ========
- Boost.Range MFC/ATL Extension provides `Boost.Range`_ support for MFC/ATL collection and string types.
- .. parsed-literal::
- 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`_
- * `MFC Ranges`_
- * `ATL Ranges`_
- * `const Ranges`_
- * `References`_
- ============
- Requirements
- ============
- - `Boost C++ Libraries Version 1.34.0`__ or later (no compilation required)
- - Visual C++ 7.1 or Visual C++ 8.0
- __ Boost_
- ==========
- 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``.
- .. parsed-literal::
- 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``.
- ==========
- References
- ==========
- - `Boost.Range`_
- - `MFC Collections`__
- - `ATL Collection Classes`__
- __ http://msdn2.microsoft.com/en-us/library/942860sh.aspx
- __ http://msdn2.microsoft.com/en-US/library/15e672bd.aspx
- .. _Boost C++ Libraries: http://www.boost.org/
- .. _Boost: `Boost C++ Libraries`_
- .. _Boost.Range: ../index.html
- .. _forward: range.html#forward_range
- .. _bidirectional: range.html#forward_range
- .. _random access: range.html#random_access_range
|