123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984 |
- #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 <afx.h> // _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 <cstddef> // ptrdiff_t
- #include <utility> // pair
- #include <boost/assert.hpp>
- #include <boost/mpl/if.hpp>
- #include <boost/range/atl.hpp>
- #include <boost/range/begin.hpp>
- #include <boost/range/const_iterator.hpp>
- #include <boost/range/detail/microsoft.hpp>
- #include <boost/range/end.hpp>
- #include <boost/iterator/iterator_adaptor.hpp>
- #include <boost/iterator/iterator_categories.hpp>
- #include <boost/iterator/iterator_facade.hpp>
- #include <boost/iterator/transform_iterator.hpp>
- #include <boost/type_traits/is_const.hpp>
- #include <boost/type_traits/remove_pointer.hpp>
- #include <boost/utility/addressof.hpp>
- #include <afx.h> // legacy CString
- #include <afxcoll.h> // CXXXArray, CXXXList, CMapXXXToXXX
- #include <tchar.h>
- 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<ArrayT, PtrType>,
- 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<ArrayT, PtrType>::type
- {
- private:
- typedef mfc_ptr_array_iterator self_t;
- typedef typename mfc_ptr_array_iterator_super<ArrayT, PtrType>::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<ArrayT_, PtrType_> 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<X, CObject *> mutable_iterator;
- typedef mfc_ptr_array_iterator<X const, CObject const *> const_iterator;
- };
- };
- template< >
- struct customization< ::CPtrArray > :
- mfc_ptr_array_functions
- {
- template< class X >
- struct meta
- {
- typedef mfc_ptr_array_iterator<X, void *> mutable_iterator;
- typedef mfc_ptr_array_iterator<X const, void const *> 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<X, ::CObject *> mutable_iterator;
- #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)
- typedef list_iterator<X const, ::CObject const *> const_iterator;
- #else
- typedef list_iterator<X const, ::CObject const * const, ::CObject const * const> const_iterator;
- #endif
- };
- };
- template< >
- struct customization< ::CPtrList > :
- list_functions
- {
- template< class X >
- struct meta
- {
- typedef list_iterator<X, void *> mutable_iterator;
- #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)
- typedef list_iterator<X const, void const *> const_iterator;
- #else
- typedef list_iterator<X const, void const * const, void const * const> const_iterator;
- #endif
- };
- };
- template< >
- struct customization< ::CStringList > :
- list_functions
- {
- template< class X >
- struct meta
- {
- typedef ::CString val_t;
- typedef list_iterator<X, val_t> mutable_iterator;
- #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)
- typedef list_iterator<X const, val_t const> const_iterator;
- #else
- typedef list_iterator<X const, val_t const, val_t const> 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<MapT, KeyT, MappedT>,
- std::pair<KeyT, MappedT>,
- forward_traversal_tag,
- std::pair<KeyT, MappedT> const
- > type;
- };
- template< class MapT, class KeyT, class MappedT >
- struct mfc_map_iterator :
- mfc_map_iterator_super<MapT, KeyT, MappedT>::type
- {
- private:
- typedef mfc_map_iterator self_t;
- typedef typename mfc_map_iterator_super<MapT, KeyT, MappedT>::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<MapT_, KeyT_, MappedT_> 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<MapT, PairT>,
- PairT,
- forward_traversal_tag
- > type;
- };
- template< class MapT, class PairT >
- struct mfc_cpair_map_iterator :
- mfc_pget_map_iterator_super<MapT, PairT>::type
- {
- private:
- typedef mfc_cpair_map_iterator self_t;
- typedef typename mfc_pget_map_iterator_super<MapT, PairT>::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<MapT_, PairT_> 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<X, key_t, mapped_t> 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<X, key_t, mapped_t> 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<X, key_t, mapped_t> 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<X, key_t, mapped_t> 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<X, pair_t> mutable_iterator;
- typedef mfc_cpair_map_iterator<X const, pair_t const> const_iterator;
- #else
- typedef ::CString key_t;
- typedef ::CString mapped_t;
- typedef mfc_map_iterator<X, key_t, mapped_t> 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<X, key_t, mapped_t> 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<X, key_t, mapped_t> mutable_iterator;
- typedef mutable_iterator const_iterator;
- };
- };
- // templates
- //
- template< class Type, class ArgType >
- struct customization< ::CArray<Type, ArgType> > :
- 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<Type, ArgType> > :
- list_functions
- {
- template< class X >
- struct meta
- {
- typedef Type val_t;
- typedef list_iterator<X, val_t> mutable_iterator;
- #if !defined(BOOST_RANGE_MFC_CONST_COL_RETURNS_NON_REF)
- typedef list_iterator<X const, val_t const> const_iterator;
- #else
- typedef list_iterator<X const, val_t const, val_t const> const_iterator;
- #endif
- };
- };
- template< class Key, class ArgKey, class Mapped, class ArgMapped >
- struct customization< ::CMap<Key, ArgKey, Mapped, ArgMapped> > :
- #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<X, pair_t> mutable_iterator;
- typedef mfc_cpair_map_iterator<X const, pair_t const> const_iterator;
- #else
- typedef Key key_t;
- typedef Mapped mapped_t;
- typedef mfc_map_iterator<X, key_t, mapped_t> mutable_iterator;
- typedef mutable_iterator const_iterator;
- #endif
- };
- };
- template< class BaseClass, class PtrType >
- struct customization< ::CTypedPtrArray<BaseClass, PtrType> >
- {
- template< class X >
- struct fun
- {
- typedef typename remove_pointer<PtrType>::type val_t;
- typedef typename mpl::if_< is_const<X>,
- 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<result_type>(p);
- }
- };
- template< class X >
- struct meta
- {
- typedef typename compatible_mutable_iterator<BaseClass>::type miter_t;
- typedef typename range_const_iterator<BaseClass>::type citer_t;
- typedef transform_iterator<fun<X>, miter_t> mutable_iterator;
- typedef transform_iterator<fun<X const>, citer_t> const_iterator;
- };
- template< class Iterator, class X >
- Iterator begin(X& x)
- {
- return Iterator(boost::begin<BaseClass>(x), fun<X>());
- }
- template< class Iterator, class X >
- Iterator end(X& x)
- {
- return Iterator(boost::end<BaseClass>(x), fun<X>());
- }
- };
- template< class BaseClass, class PtrType >
- struct customization< ::CTypedPtrList<BaseClass, PtrType> > :
- list_functions
- {
- template< class X >
- struct meta
- {
- typedef typename remove_pointer<PtrType>::type val_t;
- // not l-value
- typedef list_iterator<X, val_t * const, val_t * const> mutable_iterator;
- typedef list_iterator<X const, val_t const * const, val_t const * const> const_iterator;
- };
- };
- template< class BaseClass, class KeyPtrType, class MappedPtrType >
- struct customization< ::CTypedPtrMap<BaseClass, KeyPtrType, MappedPtrType> > :
- mfc_map_functions
- {
- template< class X >
- struct meta
- {
- typedef mfc_map_iterator<X, KeyPtrType, MappedPtrType> 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 <tchar.h>.
- typedef TCHAR *mutable_iterator;
- typedef TCHAR const *const_iterator;
- };
- template< class Iterator, class X >
- typename mutable_<Iterator, X>::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<Iterator>(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
|