Annotation of parser3/src/types/pa_vhashfile.C, revision 1.8

1.1       parser      1: /** @file
                      2:        Parser: @b table class.
                      3: 
                      4:        Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com)
                      5:        Author: Alexander Petrosyan <paf@design.ru>(http://design.ru/paf)
                      6: 
1.8     ! parser      7:        $Id: pa_vhashfile.C,v 1.7 2001/10/24 09:40:01 parser Exp $
1.1       parser      8: */
                      9: 
                     10: #include "pa_config_includes.h"
                     11: #ifdef HAVE_LIBDB
                     12: 
                     13: #include "pa_vtable.h"
                     14: #include "pa_vstring.h"
                     15: #include "pa_vhashfile.h"
                     16: #include "pa_threads.h"
1.8     ! parser     17: #include "pa_globals.h"
        !            18: //#include "pa_reque
1.1       parser     19: 
                     20: // methods
                     21: 
1.3       parser     22: void VHashfile_cleanup(void *vhashfile) {
                     23:        //_asm int 3;
                     24:        static_cast<VHashfile *>(vhashfile)->cleanup();
1.1       parser     25: }
                     26: 
1.8     ! parser     27: void VHashfile::put_field(const String& aname, Value *avalue) {
        !            28:        time_t time_to_die=0;
        !            29:        const String *value_string;
        !            30: 
        !            31:        if(Hash *hash=avalue->get_hash(&aname)) {
        !            32:                if(Value *value_value=(Value *)hash->get(*value_name)) {
        !            33:                        if(!value_value->get_junction())
        !            34:                                throw Exception(0, 0,
        !            35:                                        &value_value->name(),
        !            36:                                        "must not be code");
        !            37: 
        !            38:                        value_string=&value_value->as_string();
        !            39: 
        !            40:                        if(Value *expires_value=(Value *)hash->get(*expires_name))
        !            41:                                time_to_die=time(0)+(time_t)expires_value->as_double();
        !            42:                } else
        !            43:                        throw Exception(0, 0,
        !            44:                                &aname,
        !            45:                                "put hash value must contain .%s", VALUE_NAME);
        !            46:        } else
        !            47:                value_string=&avalue->as_string();
1.5       parser     48: 
1.8     ! parser     49:        get_connection(&aname).put(aname, *value_string, time_to_die);
1.1       parser     50: }
                     51: 
                     52: Value *VHashfile::get_field(const String& name) {
1.8     ! parser     53:        if(String *string=get_connection(&name).get(name))
1.3       parser     54:                return NEW VString(*string);
                     55:        else
                     56:                return 0;
1.1       parser     57: }
                     58: 
1.4       parser     59: Hash *VHashfile::get_hash(const String *source) {
                     60:        Hash& result=*NEW Hash(pool());
1.8     ! parser     61:        DB_Cursor cursor(get_connection(source), source);
1.4       parser     62: 
                     63:        while(true) {
1.5       parser     64:                String *key;
                     65:                String *data;
1.4       parser     66:                if(!cursor.get(key, data, DB_NEXT))
                     67:                        break;
                     68: 
1.7       parser     69:                if(key) // not expired
                     70:                        result.put(*key, NEW VString(*data));
1.4       parser     71:        }
                     72: 
                     73:        return &result;
1.1       parser     74: }
                     75: 
                     76: #endif

E-mail: