template<>\
struct secondary_index_db_functions<TYPE> {\
static int32_t db_idx_next( int32_t iterator,
uint64_t* primary ) {
return internal_use_do_not_use::db_##IDX##_next( iterator, primary ); } \
static int32_t db_idx_previous( int32_t iterator,
uint64_t* primary ) {
return internal_use_do_not_use::db_##IDX##_previous( iterator, primary ); } \
static void db_idx_remove( int32_t iterator ) { internal_use_do_not_use::db_##IDX##_remove( iterator ); } \
return internal_use_do_not_use::db_##IDX##_store( scope, table, payer, id, secondary.data(), TYPE::num_words() ); \
}\
static
void db_idx_update( int32_t iterator,
uint64_t payer,
const TYPE& secondary ) {\
internal_use_do_not_use::db_##IDX##_update( iterator, payer, secondary.data(), TYPE::num_words() ); \
}\
return internal_use_do_not_use::db_##IDX##_find_primary(
code, scope, table, secondary.data(), TYPE::num_words(), primary ); \
}\
return internal_use_do_not_use::db_##IDX##_find_secondary(
code, scope, table, secondary.data(), TYPE::num_words(), &primary ); \
}\
return internal_use_do_not_use::db_##IDX##_lowerbound(
code, scope, table, secondary.data(), TYPE::num_words(), &primary ); \
}\
return internal_use_do_not_use::db_##IDX##_upperbound(
code, scope, table, secondary.data(), TYPE::num_words(), &primary ); \
}\
};