Annotation of parser3/src/types/pa_vtable.h, revision 1.4

1.1       paf         1: /*
                      2:        Parser
                      3:        Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
                      4:        Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
                      5: 
1.4     ! paf         6:        $Id: pa_vtable.h,v 1.3 2001/03/12 21:54:21 paf Exp $
1.1       paf         7: */
                      8: 
                      9: #ifndef PA_VTABLE_H
                     10: #define PA_VTABLE_H
                     11: 
                     12: #include "pa_vstateless_object.h"
                     13: #include "pa_table.h"
                     14: #include "_table.h"
                     15: #include "pa_vunknown.h"
                     16: 
                     17: class VTable : public VStateless_object {
                     18: public: // Value
                     19: 
                     20:        // all: for error reporting after fail(), etc
                     21:        const char *type() const { return "table"; }
1.4     ! paf        22:        // table: ftable
        !            23: //     const Table *get_table() { return &ftable; };
1.1       paf        24:        // table: itself
                     25:        VTable *get_vtable() { return this; }
                     26:        // table: column
                     27:        Value *get_element(const String& name) {
1.3       paf        28:                // methods
1.2       paf        29:                if(Value *result=VStateless_object::get_element(name))
                     30:                        return result;
                     31: 
1.4     ! paf        32:                if(ftable)
        !            33:                        if(const String *string=ftable->item(name))
1.1       paf        34:                                return NEW VString(*string);
                     35: 
                     36:                return NEW VUnknown(pool());
                     37:        }
                     38: 
                     39: public: // usage
                     40: 
                     41:        VTable(Pool& apool) : VStateless_object(apool, *table_class), 
1.4     ! paf        42:                ftable(0) {
1.1       paf        43:        }
1.4     ! paf        44:        void set_table(Table& avalue) { ftable=&avalue; }
1.1       paf        45:        Table& table() { 
1.4     ! paf        46:                if(!ftable)
1.1       paf        47:                        bark("getting unset vtable value");
                     48: 
1.4     ! paf        49:                return *ftable; 
1.1       paf        50:        }
                     51: 
                     52: private:
                     53: 
1.4     ! paf        54:        Table *ftable;
1.1       paf        55: 
                     56: };
                     57: 
                     58: #endif

E-mail: