52 lines
2.8 KiB
Plaintext
52 lines
2.8 KiB
Plaintext
{
|
|
"Define template": {
|
|
"prefix": "define_template",
|
|
"body": [
|
|
"#define _template_func_def(T, func) T_DEFINE_##func(T)",
|
|
"#define _template_func(T, func) T_##func##__##T"
|
|
],
|
|
"description": "Define template"
|
|
},
|
|
"Define sort": {
|
|
"prefix": "define_sort",
|
|
"body": [
|
|
"#define SORT_PREDICATE(type, name) bool name(type a, type b)",
|
|
"#define SORT_SWAP(type, a, b) \\",
|
|
" { \\",
|
|
" const type _BLOCK_T = a; \\",
|
|
" a = b; \\",
|
|
" b = _BLOCK_T; \\",
|
|
" }",
|
|
"",
|
|
"#define T_DEFINE_less(T) \\",
|
|
" SORT_PREDICATE(T, T_less__##T) { return a < b; }",
|
|
"#define T_DEFINE_greater(T) \\",
|
|
" SORT_PREDICATE(T, T_greater__##T) { return a > b; }",
|
|
"",
|
|
"#define T_DEFINE_sort(T) \\",
|
|
" void T_sort__##T(T *start, const T *end, bool (*predicate)(T, T)) { \\",
|
|
" T *i, *j; \\",
|
|
" for (i = start; i < end; i++) { \\",
|
|
" for (j = i; j < end; j++) { \\",
|
|
" if (predicate(*i, *j)) { \\",
|
|
" SORT_SWAP(T, *i, *j); \\",
|
|
" } \\",
|
|
" } \\",
|
|
" } \\",
|
|
" }",
|
|
"",
|
|
"#define T_DEFINE_sort_default(T) \\",
|
|
" void T_sort_default__##T(T *start, const T *end) { \\",
|
|
" T_sort__##T(start, end, _template_func(T, less)); \\",
|
|
" }",
|
|
"",
|
|
"#define T_DEFINE_sort_init(T) \\",
|
|
" _template_func_def(T, less); \\",
|
|
" _template_func_def(T, greater); \\",
|
|
" _template_func_def(T, sort); \\",
|
|
" _template_func_def(T, sort_default);"
|
|
],
|
|
"description": "Define sort"
|
|
}
|
|
}
|