ライブラリAPIで定義されたユーティリティ構造体があり、4つのフィールド、すべて数値カウンターがあります。
typedef struct {
size_t bytes;
int codepoints;
int graphemes;
int columns;
} TickitStringPos;
これらの構造を簡単に操作できるユーティリティをいくつか提供したいと思います。これらを(静的インライン)関数として実装できます。
static inline void tickit_stringpos_zero(TickitStringPos *pos) {
pos->bytes = pos->codepoints = pos->graphemes = pos->columns = 0;
}
static inline void tickit_stringpos_limit_columns(TickitStringPos *pos, int columns) {
pos->bytes = pos->codepoints = pos->graphemes = -1;
pos->columns = columns;
}
TickitStringPos here, limit;
tickit_stringpos_zero(&here);
tickit_stringpos_limit_columns(&limit, 20);
または、これらをマクロとして実装することもできます。
#define TICKIT_STRINGPOS_ZERO(pos) do { \
(pos).bytes = (pos).codepoints = (pos).graphemes = (pos).columns = 0; \
} while(0);
#define TICKIT_STRINGPOS_LIMIT_COLUMNS(pos,_columns) do { \
(pos).bytes = (pos).codepoints = (pos).graphemes = -1; \
(pos).columns = _columns; \
} while(0);
TickitStringPos here, limit;
TICKIT_STRINGPOS_ZERO(here);
TICKIT_STRINGPOS_LIMIT_COLUMNS(limit, 20);
これら2つのアプローチを比較検討するために何を検討する必要がありますか?それぞれが同じように強力で柔軟性がある可能性がありますが、何らかの理由で1つのアプローチが特に望ましいのでしょうか。