32#ifdef _QX_ENABLE_BOOST
56#include <boost/foreach.hpp>
58#ifndef BOOST_FOREACH_ID
59#define BOOST_FOREACH_ID(x) x
68template<
typename T,
typename C,
bool is_qx_collection = false>
71 typedef typename boost::foreach_detail_::foreach_reference<T, C>::type
type;
74template<
typename T,
typename C>
77 typedef typename T::type_pair_key_value::second_type
type;
80template<
typename T,
typename C,
bool is_qx_collection = false>
84 deref(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type<T, C> * ptmp)
85 {
return boost::foreach_detail_::deref(cur, ptmp); }
88 rderef(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type<T, C> * ptmp)
89 {
return boost::foreach_detail_::rderef(cur, ptmp); }
92template<
typename T,
typename C>
96 deref(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type<T, C> * ptmp)
97 {
return boost::foreach_detail_::deref(cur, ptmp).second; }
100 rderef(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type<T, C> * ptmp)
101 {
return boost::foreach_detail_::rderef(cur, ptmp).second; }
106 template<
typename T,
typename C>
108 deref(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type<T, C> * ptmp)
111 template<
typename T,
typename C>
113 deref_reverse(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type<T, C> * ptmp)
121#define QX_FOREACH_DEREF(COL) \
122 qx::foreach::qx_deref::deref(BOOST_FOREACH_ID(_foreach_cur), BOOST_FOREACH_TYPEOF(COL))
124#define QX_FOREACH_DEREF_REVERSE(COL) \
125 qx::foreach::qx_deref::deref_reverse(BOOST_FOREACH_ID(_foreach_cur), BOOST_FOREACH_TYPEOF(COL))
127#define QX_FOREACH(VAR, COL) \
128 BOOST_FOREACH_PREAMBLE() \
129 if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_col) = BOOST_FOREACH_CONTAIN(COL)) {} else \
130 if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_cur) = BOOST_FOREACH_BEGIN(COL)) {} else \
131 if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_end) = BOOST_FOREACH_END(COL)) {} else \
132 for (bool BOOST_FOREACH_ID(_foreach_continue) = true; \
133 BOOST_FOREACH_ID(_foreach_continue) && !BOOST_FOREACH_DONE(COL); \
134 BOOST_FOREACH_ID(_foreach_continue) ? BOOST_FOREACH_NEXT(COL) : (void)0) \
135 if (boost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_continue))) {} else \
136 for (VAR = QX_FOREACH_DEREF(COL); !BOOST_FOREACH_ID(_foreach_continue); BOOST_FOREACH_ID(_foreach_continue) = true)
138#define QX_FOREACH_REVERSE(VAR, COL) \
139 BOOST_FOREACH_PREAMBLE() \
140 if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_col) = BOOST_FOREACH_CONTAIN(COL)) {} else \
141 if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_cur) = BOOST_FOREACH_RBEGIN(COL)) {} else \
142 if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_end) = BOOST_FOREACH_REND(COL)) {} else \
143 for (bool BOOST_FOREACH_ID(_foreach_continue) = true; \
144 BOOST_FOREACH_ID(_foreach_continue) && !BOOST_FOREACH_RDONE(COL); \
145 BOOST_FOREACH_ID(_foreach_continue) ? BOOST_FOREACH_RNEXT(COL) : (void)0) \
146 if (boost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_continue))) {} else \
147 for (VAR = QX_FOREACH_DEREF_REVERSE(COL); !BOOST_FOREACH_ID(_foreach_continue); BOOST_FOREACH_ID(_foreach_continue) = true)
153#ifdef _foreach_reverse
154#undef _foreach_reverse
161#ifdef _foreach_reverse_if
162#undef _foreach_reverse_if
165#define _foreach QX_FOREACH
166#define _foreach_reverse QX_FOREACH_REVERSE
168#define _foreach_if(VAR, COL, COND) _foreach(VAR, COL) if (COND)
169#define _foreach_reverse_if(VAR, COL, COND) _foreach_reverse(VAR, COL) if (COND)
qx::trait::is_qx_collection<T>::value : return true if T is a qx::QxCollection<> container of QxOrm l...
Root namespace for all QxOrm library features.
T::type_pair_key_value::second_type type
boost::foreach_detail_::foreach_reference< T, C >::type type
static qx::foreach::qx_deref_boost_or_qx< T, C, true >::type rderef(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type< T, C > *ptmp)
static qx::foreach::qx_deref_boost_or_qx< T, C, true >::type deref(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type< T, C > *ptmp)
static qx::foreach::qx_deref_boost_or_qx< T, C, false >::type deref(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type< T, C > *ptmp)
static qx::foreach::qx_deref_boost_or_qx< T, C, false >::type rderef(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type< T, C > *ptmp)
static qx::foreach::qx_deref_boost_or_qx< T, C, qx::trait::is_qx_collection< T >::value >::type deref_reverse(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type< T, C > *ptmp)
static qx::foreach::qx_deref_boost_or_qx< T, C, qx::trait::is_qx_collection< T >::value >::type deref(boost::foreach_detail_::auto_any_t cur, boost::foreach_detail_::type2type< T, C > *ptmp)