mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
Add q_last_type() queue function
Analogous to q_cur_type(), asserts that queue indices are within a valid range.
This commit is contained in:
parent
a6383a54a4
commit
cea914e18e
@ -196,6 +196,14 @@ static really_inline s64a q_cur_loc(const struct mq *q) {
|
|||||||
return q->items[q->cur].location;
|
return q->items[q->cur].location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** \brief Returns the type of the last event in the queue. */
|
||||||
|
static really_inline u32 q_last_type(const struct mq *q) {
|
||||||
|
assert(q->cur < q->end);
|
||||||
|
assert(q->end > 0);
|
||||||
|
assert(q->end <= MAX_MQE_LEN);
|
||||||
|
return q->items[q->end - 1].type;
|
||||||
|
}
|
||||||
|
|
||||||
/** \brief Returns the location (relative to the beginning of the current data
|
/** \brief Returns the location (relative to the beginning of the current data
|
||||||
* buffer) of the last event in the queue. */
|
* buffer) of the last event in the queue. */
|
||||||
static really_inline s64a q_last_loc(const struct mq *q) {
|
static really_inline s64a q_last_loc(const struct mq *q) {
|
||||||
|
@ -379,7 +379,7 @@ void ensureEnd(struct mq *q, UNUSED u32 qi, s64a final_loc) {
|
|||||||
DEBUG_PRINTF("ensure MQE_END %lld for queue %u\n", final_loc, qi);
|
DEBUG_PRINTF("ensure MQE_END %lld for queue %u\n", final_loc, qi);
|
||||||
if (final_loc >= q_last_loc(q)) {
|
if (final_loc >= q_last_loc(q)) {
|
||||||
/* TODO: ensure situation does not arise */
|
/* TODO: ensure situation does not arise */
|
||||||
assert(q->items[q->end - 1].type != MQE_END);
|
assert(q_last_type(q) != MQE_END);
|
||||||
pushQueueNoMerge(q, MQE_END, final_loc);
|
pushQueueNoMerge(q, MQE_END, final_loc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -758,7 +758,7 @@ found_miracle:
|
|||||||
|
|
||||||
q_skip_forward_to(q, miracle_loc);
|
q_skip_forward_to(q, miracle_loc);
|
||||||
|
|
||||||
if (q->items[q->end - 1].type == MQE_START) {
|
if (q_last_type(q) == MQE_START) {
|
||||||
DEBUG_PRINTF("miracle caused infix to die\n");
|
DEBUG_PRINTF("miracle caused infix to die\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -853,7 +853,7 @@ char roseTestLeftfix(const struct RoseEngine *t, const struct RoseRole *tr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (q_cur_loc(q) < loc || q->items[q->end - 1].type != MQE_START) {
|
if (q_cur_loc(q) < loc || q_last_type(q) != MQE_START) {
|
||||||
if (left->infix) {
|
if (left->infix) {
|
||||||
if (infixTooOld(q, loc)) {
|
if (infixTooOld(q, loc)) {
|
||||||
DEBUG_PRINTF("infix %u died of old age\n", ri);
|
DEBUG_PRINTF("infix %u died of old age\n", ri);
|
||||||
|
@ -167,7 +167,7 @@ found_miracle:
|
|||||||
|
|
||||||
DEBUG_PRINTF("skip q forward, %lld to %lld\n", begin_loc, miracle_loc);
|
DEBUG_PRINTF("skip q forward, %lld to %lld\n", begin_loc, miracle_loc);
|
||||||
q_skip_forward_to(q, miracle_loc);
|
q_skip_forward_to(q, miracle_loc);
|
||||||
if (q->items[q->end - 1].type == MQE_START) {
|
if (q_last_type(q) == MQE_START) {
|
||||||
DEBUG_PRINTF("miracle caused infix to die\n");
|
DEBUG_PRINTF("miracle caused infix to die\n");
|
||||||
return MIRACLE_DEAD;
|
return MIRACLE_DEAD;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user