Analytics C++ Sequence Methods by Category

The C++ class Sequence provides a set of analytics methods that operate on sequences. These methods inherit functionality from the specialized C API type mco_seq_iterator_t as the "handle" to manage sequence fields. The table below links to pages describing the methods in detail. The examples in these pages use the following schema definition for a database of stock quotes:

 
    #define uint4 unsigned<4>
    #define MAX_SYMBOL_LEN 21
     
    declare database stockdb;
 
    class Quote 
    {
        char<MAX_SYMBOL_LEN> symbol;
        sequence<date asc> day;
        sequence<float> low;
        sequence<float> high;
        sequence<float> open;
        sequence<float> close;
        sequence<uint4> volume;
        sequence<char<15>> day_str;
 
        unique tree<symbol> by_sym;
    };
     

Note that the primary key for this table is the unique index by_sym on field symbol and all of the other fields except day_str are of type sequence where the field day is an ordered sequence. The day_str field is added to provide a convenient character array representation of the date type stored in field day. Typically analytics operations are performed on one or more sequence fields extracted from a Quote object which is effectively a "row" from a "result set" cursor. For example, the following code snippet iterates through the entire database printing out the values of the Quote character field symbol and sequence fields day and high:

 
    mco_trans_h trans;
    mco_date day;
    mco_cursor_t quote_cursor;
    Quote quote;
    MCO_RET rc;
     
    rc = mco_trans_start(db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &trans);
    if ( MCO_S_OK == rc )
    {
 
        /* Iterate through all Quote objects */
        Quote::by_sym::cursor(trans, &quote_cursor);
        for (rc = mco_cursor_first(trans, &quote_cursor); 
            rc != MCO_S_CURSOR_END; 
            rc = mco_cursor_next(trans, &quote_cursor)) 
        {
            /* Get current object */
            quote.from_cursor(trans, &quote_cursor);
             
            /* Initialize iterators */
            Sequence<uint4> day_iterator = quote.day_iterator();
            Sequence<float> high_iterator = quote.high_iterator();
            Sequence< Char<15> > day_str_iterator = quote.day_str_iterator();
 
            /* Iterate sequence fields */
            while (day_iterator.next(day)) 
            {
                Char<MAX_SYMBOL_LEN> symbol = quote.symbol;
                Char<15> day_str = ++day_str_iterator;
                printf("%s[%u(%s)]: %f\n", (char*)symbol, day, 
                    (char*)day_str, ++high_iterator);
            }
        }
        mco_trans_commit(trans);
    }
     

Please use the links below to view descriptions and examples of these functions by category:

Unary_Operators Methods that take a single input sequence and produce a result sequence of values such as: abs, neg, match
Binary_Methods Methods that take two input sequences and produce a result sequence of values such as: add, sub, mul, div, mod, max, min
Comparison_Operators Methods that take two input sequences and produce a result sequence of Boolean values for the comparison operators: ==, !=, >, >=, <, <=
Logical_Operators Methods that take two input sequences and produce a result sequence of Boolean values from the following logical operators: not, and, or, xor
Collapse_Methods Methods that collapse two sequences to scalar values such as: weighted sum, weighted average, covariance, correlation
Conditional_Methods Methods that perform operations on one or two input sequences based on a condition such as: if, cond, filter, filter_pos
Manipulator_Methods Methods that perform various manipulations of input sequences
Iterator_Methods Methods that extract values from and reset sequence iterators such as: next, reset
Top_Methods Methods that return the top n elements (or their positions) of the input sequence: top_max, top_min, top_pos_max, top_pos_min
RLE_Methods Methods that perform Run Length Encryption (RLE) operations: count, decode, is_rle
Grand Aggregate Methods that take a single input sequence iterator argument and produce a scalar value in the result sequence
Group_Aggregate Methods that split the input sequence into groups based on the values of a group_by argument
Grid_Aggregate Methods that split the input sequence into intervals specified by the interval argument which determines the maximum number of elements in the group
Window_Aggregate Like the “Grid” methods illustrated above, however the interval argument indicates the next N elements from the input sequence
Hash_Aggregate Methods that group the resulting sequence by grouping sequence that is not ordered
Cumulative_Aggregate Methods that accumulate the average, sum, product, etc. of all preceding elements in the result sequence
Miscellaneous Methods that provide sort, rank and histogram functionalities