c-homework/.vscode/c.template.code-snippets
2025-03-27 00:44:25 +08:00

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"
}
}