1 #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPCOMP_H
2 #define BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPCOMP_H
35 template <
class Container,
class FUNC>
36 int binary_search(
int key,
const Container& a,
int left,
int right, FUNC func,
43 int mid, tmp, end = right;
46 mid = (left + right) / 2;
49 if ((tmp = func(a[mid], key)) == 0)
62 inline int compByKey(
const fieldsBase& l,
const fieldsBase& r,
const int& s)
64 assert((s < (
int)l.size()) && (s < (
int)r.size()));
65 return l.getFieldNoCheck(s).comp(r.getFieldNoCheck(s), CMPLOGICAL_VAR_COMP_ALL);
68 template <class Container> class grouping_comp
70 typedef std::vector<typename Container::key_type> key_vec;
71 const key_vec& m_keys;
75 grouping_comp(Container& mdls,
76 const std::vector<typename Container::key_type>& keys)
77 : m_keys(keys), m_mdls(mdls)
81 int operator()(
int lv,
int rv)
const
83 const typename Container::row_pure_type& lm = m_mdls[lv];
84 const typename Container::row_pure_type& rm = m_mdls[rv];
85 for (
int i = 0; i < (int)m_keys.size(); ++i)
87 typename Container::key_type s = m_keys[i];
88 int ret = (s == -1) ? 0 : compByKey(lm, rm, s);
95 bool isEqual(
const typename Container::row_type& lm,
96 const typename Container::row_type& rm)
98 for (
int i = 0; i < m_keys.size(); ++i)
100 typename Container::key_type s = m_keys[i];
101 int ret = (s == -1) ? 0 : compByKey(*lm, *rm, s);
117 #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPCOMP_H
findIterator find(table_ptr tb, const char_td keynum, const Q &q, const T0 kv0, const T1 kv1, const T2 kv2, const T3 kv3, const T4 kv4, const T5 kv5, const T6 kv6, const T7 kv7)
Definition: trdboostapi.h:589