Created
February 26, 2015 13:00
-
-
Save GnsP/49f6776e375c4d843ef6 to your computer and use it in GitHub Desktop.
TMP Random Access Container
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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