初心者な質問ですいません。キューについて教えてください。
キューについて考える。
組み込みで使うのを想定しておく。mallocは使わない。最初に最大サイズが決まってて、それ以上はどうでもいい。ものとする。
struct q
{
char *buf;
int buflen;
int head;
int tail;
};
void init( struct q *q, char *buf, int len ) {
q->head = 0;
q->tail = 0;
q->buf = buf;
q->buflen = len;
}
void push( struct q *q, char c ) {
if ( q->head == (tail-1) ) {
/* 知らない */
return;
}
/* ... 端っこの処理とか ... */
q->buf[q->head] = c;
q->head++;
}
int pop( struct q *q ) {
int ret;
if ( q->head == q->tail )
return -1
/* ... 端っこの処理とか ... */
ret = q->buf[q->tail];
q->tail++;
return ret;
}こんな感じ。よゆーだなー、と思ってやってたんだけど、このやりかただと、じみーな問題がある。バッファのサイズ分使えないのだ。
char buf[5]; init( &q, buf, 5 ); /* これだと四個までしか入れられない… */
はたして、これを簡単に解決する方法はあるだろうか。
■
と、思ったけど、あんまり面白くないな。
最近方向性がわからなくなってきてるのでちょっと休む。