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

1.1       paf         1: /*
1.6     ! paf         2:   $Id: pa_table.C,v 1.5 2001/01/29 22:34:58 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.6     ! paf        14:        Array(arequest.pool(), initial_rows),
1.2       paf        15:        request(arequest),
1.5       paf        16:        fcurrent(0),
                     17:        fcolumns(acolumns), 
1.6     ! paf        18:        name2number(arequest.pool(), false) {
1.1       paf        19: #ifndef NO_STRING_ORIGIN
1.5       paf        20:        forigin.file=afile;
                     21:        forigin.line=aline;
1.1       paf        22: #endif
                     23: 
1.5       paf        24:        if(fcolumns)
                     25:                for(int i=0; i<fcolumns->size(); i++) {
1.1       paf        26:                        String name(pool);
1.5       paf        27:                        name.APPEND(fcolumns->get_cstr(i), 0, 0);
1.2       paf        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.6     ! paf        34:                request.exception().raise(0, 0, 
        !            35:                        0,
1.2       paf        36:                        "table column index %d is out of range [0..%d]", 
                     37:                        index, size()-1);
                     38:        
1.3       paf        39:        return static_cast<const Array *>(get(index));
1.2       paf        40: }
                     41: 
1.3       paf        42: const char *Table::item(int index) {
1.5       paf        43:        const Array *row=at(fcurrent);
1.2       paf        44:        return row->get_cstr(index);
                     45: }
                     46: 
1.5       paf        47: const char *Table::item(const String& column_name) {
1.2       paf        48:        int column_index;
1.5       paf        49:        if(fcolumns) {
1.2       paf        50:                int found_index=name2number.get_int(column_name);
                     51:                if(found_index)
                     52:                        column_index=found_index-1;
                     53:                else
1.6     ! paf        54:                        request.exception().raise(0, 0,
        !            55:                                &column_name, 
        !            56:                                "column not found");
1.2       paf        57:        } else {
                     58:                column_index=atoi(column_name.cstr());
1.5       paf        59:                const Array *row=at(fcurrent);
1.2       paf        60:                if(column_index<0 || column_index>=row->size())
1.6     ! paf        61:                        request.exception().raise(0, 0,
        !            62:                                &column_name, 
1.2       paf        63:                                "table column index %d is out of range [0..%d]", 
                     64:                                column_index, row->size()-1);
                     65:        }
                     66: 
                     67:        return item(column_index);
1.1       paf        68: }
1.5       paf        69: 

E-mail: