Skip to content

Instantly share code, notes, and snippets.

@GnsP
Created February 26, 2015 13:00
Show Gist options
  • Save GnsP/49f6776e375c4d843ef6 to your computer and use it in GitHub Desktop.
Save GnsP/49f6776e375c4d843ef6 to your computer and use it in GitHub Desktop.
TMP Random Access Container
#define STATIC_ASSERT(expr) { char assertion_stage[((expr) ? 0:-1)]; }
#define RANDOM_ACCESS_CONTAINER_META(KEY_TYPE, val_type, name) \
template<KEY_TYPE KEY> \
struct meta_container_##name##_{ \
typedef val_type value_type; \
typedef KEY_TYPE key_type; \
static const value_type value = static_cast<value_type>(0); \
}; \
typedef KEY_TYPE meta_container_##name##_key_type_; \
typedef val_type meta_container_##name##_val_type_;
#define RANDOM_ACCESS_INSERT(name, key, val) \
template<> struct meta_container_##name##_<key>{ \
typedef meta_container_##name##_val_type_ value_type; \
typedef meta_container_##name##_key_type_ key_type; \
static const value_type value = val; \
};
#define RANDOM_ACCESS_GET(name, key) meta_container_##name##_<key>::value
RANDOM_ACCESS_CONTAINER_META(int, int, TMP_INT_MAP);
RANDOM_ACCESS_INSERT(TMP_INT_MAP, 5, 15);
RANDOM_ACCESS_INSERT(TMP_INT_MAP, 6, 18);
RANDOM_ACCESS_INSERT(TMP_INT_MAP, 7, 21);
int main(){
STATIC_ASSERT ( RANDOM_ACCESS_GET(TMP_INT_MAP, 5) == 15 );
STATIC_ASSERT ( RANDOM_ACCESS_GET(TMP_INT_MAP, 6) == 18 );
STATIC_ASSERT ( RANDOM_ACCESS_GET(TMP_INT_MAP, 7) == 21 );
STATIC_ASSERT ( RANDOM_ACCESS_GET(TMP_INT_MAP, 1) == 0 );
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment