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

1.1       paf         1: /*
1.4     ! paf         2:   $Id: pa_table.C,v 1.3 2001/01/29 20:46:22 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: 
1.3       paf        32: const Array *Table::at(int index) {
1.2       paf        33:        if(index<0 || index>=size())
1.4     ! paf        34:                request.operator_error.raise(0, 
1.2       paf        35:                        "table column index %d is out of range [0..%d]", 
                     36:                        index, size()-1);
                     37:        
1.3       paf        38:        return static_cast<const Array *>(get(index));
1.2       paf        39: }
                     40: 
1.3       paf        41: const char *Table::item(int index) {
                     42:        const Array *row=at(current);
1.2       paf        43:        return row->get_cstr(index);
                     44: }
                     45: 
1.4     ! paf        46: const char *Table::item(String& column_name) {
1.2       paf        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
1.4     ! paf        53:                        request.operator_error.raise(&column_name, "column not found");
1.2       paf        54:        } else {
                     55:                column_index=atoi(column_name.cstr());
1.3       paf        56:                const Array *row=at(current);
1.2       paf        57:                if(column_index<0 || column_index>=row->size())
1.4     ! paf        58:                        request.operator_error.raise(&column_name, 
1.2       paf        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: