Iterator C Sequence Functions

The iterator C function mco_seq_next_TYPE() is used to iterate sequences of the specified type. The function signature is:

 
    MCO_RET mco_seq_next_TYPE(mco_seq_iterator_h iterator, mco_TYPE* val);
             

where TYPE is one of the types listed in the Analytics Functions page. The function extracts the next element value into argument val and returns MCO_S_CURSOR_END when there are no more elements in the sequence. After iterating through a sequence, before that iterator can be used again a reset function must be called to "rewind" the iterator position to the beginning of the sequence. The function signature has the following form:

     
    MCO_RET mco_seq_reset_iterator(mco_seq_iterator_h iterator);
 

Depending on the type of function that was used to create the iterator, one of the following reset functions must be used:

mco_seq_reset_iterator() Reset the iterator position to the first element in the sequence; this iterator is "root" and it does not depend on other sequences, e.g. the result of a search or a sequence field iteration
mco_seq_reset_unary_iterator() Reset the position for a unary iterator to the first element in the sequence; this iterator has one operand and will try to reset the iterator on which it depends, e.g. functions like mco_seq_abs_TYPE(), mco_seq_neg_TYPE().
mco_seq_reset_binary_iterator() Reset the position for a binary iterator to the first element in the sequence; this iterator has two operands and will try to reset both iterators on which it depends, e.g. functions mco_seq_add_TYPE(), mco_seq_sub_TYPE().

 

Example

Following is an example code snippet demonstrating different types of iteration:

         
    {
        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, &quote_cursor); 
            rc != MCO_S_CURSOR_END; 
            rc = mco_cursor_next(trans, &quote_cursor)) 
        {
            Quote_from_cursor(trans, &quote_cursor, &quote);
            Quote_high_iterator(&quote, &high_iterator);
            Quote_day_iterator(&quote, &day_iterator);
            Quote_day_str_iterator(&quote, &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);
            }
            ...
        }
        ...
    }