現時点では、次のようなコードがあります。
#define ______ 0x0000
static const uint16_t plane0[256] = {
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
0x0058, 0x0059, 0x005A, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, 0x039C, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______,
...
};
#undef ______
uint16_t caseup(uint16_t wc)
{
return (plane0[wc] == 0x0000) ? wc : plane0[wc];
}
私は本当にそのcaseup
機能を単純なものに置き換えたいと思っていますreturn plane0[wc]
。余分な比較分岐は、大局的に見ればそれほどコストがかからないかもしれませんが、それを取り除けば、コードは確実により効率的になります。
しかし、テーブルを書き直す必要はありません。ツールを使用して書き直すことさえしません。ケース マッピング テーブルが大量のガベージ 16 進値でごちゃごちゃになるのは望ましくありません。私は、表を大部分は元のマクロ化したままにしておき、16 進数の値を実際に非 ID ケース マッピングが必要な場所にだけ配置したいと考えています。
C ++ 11でこれを行う最もクリーンな方法は何ですか?