迭代序列函数
迭代器 C 序列函数 mco_seq_next_TYPE()
用于迭代指定类型的序列。
MCO_RET mco_seq_next_TYPE(
mco_seq_iterator_h iterator,
mco_TYPE* val
);
其中 TYPE 是分析函数页面中列出的类型之一。该函数将序列中的下一个元素值提取到参数 val 中,并在序列中没有更多元素时返回 MCO_S_CURSOR_END
。
reset
在遍历完一个序列后,若要再次使用该迭代器,则必须调用重置函数将迭代器位置“回退”到序列的开头。
该函数的结构如下所示:
MCO_RET mco_seq_reset_iterator(
mco_seq_iterator_h iterator
);
根据用于创建迭代器的函数类型,必须使用以下重置函数之一:
mco_seq_reset_iterator()
:将迭代器的位置重置到序列中的第一个元素;此迭代器为“根”迭代器,它不依赖于其他序列,例如搜索结果或序列字段迭代。mco_seq_reset_unary_iterator()
:将一元迭代器的位置重置为序列中的第一个元素;此迭代器有一个操作数,并将尝试重置其依赖的迭代器,例如像mco_seq_abs_TYPE()
、mco_seq_neg_TYPE()
这样的函数。mco_seq_reset_binary_iterator()
:将二进制迭代器的位置重置为序列中的第一个元素;此迭代器有两个操作数,并将尝试重置其依赖的两个迭代器,例如函数mco_seq_add_TYPE()
、mco_seq_sub_TYPE()
。
示例
下面是一个示例代码片段,演示了不同类型的迭代:
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
mco_seq_iterator_t high_iterator, day_iterator, day_str_iterator;
mco_date day;
float high;
char buff[15];
char symbol[MAX_SYMBOL_LEN];
MCO_RET rc;
...
for (rc = mco_cursor_first(trans, "e_cursor);
rc != MCO_S_CURSOR_END;
rc = mco_cursor_next(trans, "e_cursor))
{
Quote_from_cursor(trans, "e_cursor, "e);
Quote_high_iterator("e, &high_iterator);
Quote_day_iterator("e, &day_iterator);
Quote_day_str_iterator("e, &day_str_iterator));
...
while ((rc = mco_seq_next_uint4(&day_iterator, &day)) != MCO_S_CURSOR_END)
{
rc = mco_seq_next_float(&high_iterator, &high);
rc = mco_seq_next_char(&day_str_iterator, buff);
printf("%s[%u(%s)]: %f\n", symbol, day, buff, high);
}
...
}
...
}