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: