Annotation of parser3/src/main/pa_table.C, revision 1.2

1.1       paf         1: /*
1.2     ! paf         2:   $Id: pa_table.C,v 1.1 2001/01/29 15:56:04 paf Exp $
1.1       paf         3: */
                      4: 
1.2     ! paf         5: #include <stdlib.h>
        !             6: 
1.1       paf         7: #include "pa_table.h"
                      8: #include "pa_pool.h"
                      9: 
1.2     ! paf        10: Table::Table(Request& arequest, 
1.1       paf        11:                         char *afile, uint aline, 
                     12:                         Array *acolumns, 
                     13:                         int initial_rows) :
1.2     ! paf        14:        Array(arequest.pool, initial_rows),
        !            15:        request(arequest),
        !            16:        current(0),
        !            17:        columns(acolumns), 
        !            18:        name2number(arequest.pool, false) {
1.1       paf        19: #ifndef NO_STRING_ORIGIN
                     20:        origin.file=afile;
                     21:        origin.line=aline;
                     22: #endif
                     23: 
1.2     ! paf        24:        if(columns)
        !            25:                for(int i=0; i<columns->size(); i++) {
1.1       paf        26:                        String name(pool);
1.2     ! paf        27:                        name.APPEND(columns->get_cstr(i), 0, 0);
        !            28:                        name2number.put(name, i+1);
1.1       paf        29:                }
1.2     ! paf        30: }
        !            31: 
        !            32: Array *Table::at(int index) {
        !            33:        if(index<0 || index>=size())
        !            34:                request.error.raise(0, 
        !            35:                        "table column index %d is out of range [0..%d]", 
        !            36:                        index, size()-1);
        !            37:        
        !            38:        return static_cast<Array *>(get(index));
        !            39: }
        !            40: 
        !            41: char *Table::item(int index) {
        !            42:        Array *row=at(current);
        !            43:        return row->get_cstr(index);
        !            44: }
        !            45: 
        !            46: char *Table::item(String column_name) {
        !            47:        int column_index;
        !            48:        if(columns) {
        !            49:                int found_index=name2number.get_int(column_name);
        !            50:                if(found_index)
        !            51:                        column_index=found_index-1;
        !            52:                else
        !            53:                        request.error.raise(&column_name, "column not found");
        !            54:        } else {
        !            55:                column_index=atoi(column_name.cstr());
        !            56:                Array *row=at(current);
        !            57:                if(column_index<0 || column_index>=row->size())
        !            58:                        request.error.raise(&column_name, 
        !            59:                                "table column index %d is out of range [0..%d]", 
        !            60:                                column_index, row->size()-1);
        !            61:        }
        !            62: 
        !            63:        return item(column_index);
1.1       paf        64: }

E-mail: