Annotation of parser3/src/types/pa_vhash.h, revision 1.16
1.10 paf 1: /** @file
2: Parser: @b hash parser type decl.
3:
1.1 paf 4: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
1.3 paf 5: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
1.1 paf 6:
1.16 ! parser 7: $Id: pa_vhash.h,v 1.15 2001/07/20 09:40:46 parser Exp $
1.1 paf 8: */
9:
10: #ifndef PA_VHASH_H
11: #define PA_VHASH_H
12:
1.13 paf 13: #include "classes.h"
1.1 paf 14: #include "pa_value.h"
15: #include "pa_hash.h"
16:
1.13 paf 17: extern Methoded *hash_base_class;
18:
1.11 paf 19: /// value of type 'hash', implemented with Hash
1.13 paf 20: class VHash : public VStateless_class {
1.1 paf 21: public: // value
22:
1.2 paf 23: const char *type() const { return "hash"; }
1.1 paf 24:
1.11 paf 25: /// VHash: fhash
1.8 paf 26: Hash *get_hash() { return &fhash; }
1.14 paf 27:
28: /// VHash: 0
29: VStateless_class *get_class() { return 0; }
1.7 paf 30:
1.11 paf 31: /// VHash: (key)=value
1.1 paf 32: Value *get_element(const String& name) {
1.15 parser 33: // $CLASS,$method
1.13 paf 34: if(Value *result=VStateless_class::get_element(name))
35: return result;
36:
37: // $element
1.16 ! parser 38: if(Value *result=static_cast<Value *>(fhash.get(name)))
! 39: return result;
! 40:
! 41: // default value
! 42: return static_cast<Value *>(fhash.get(*hash_default_element_name));
1.1 paf 43: }
44:
1.11 paf 45: /// VHash: (key)=value
1.1 paf 46: void put_element(const String& name, Value *value) {
1.5 paf 47: fhash.put(name, value);
1.1 paf 48: }
49:
50: public: // usage
51:
1.13 paf 52: VHash(Pool& apool) : VStateless_class(apool, hash_base_class),
53: fhash(apool),
54: fdefault(0) {
55: }
1.7 paf 56:
57: Hash& hash() { return fhash; }
1.1 paf 58:
1.13 paf 59: void set_default(Value& adefault) { fdefault=&adefault; }
60: Value *get_default() { return fdefault; }
61:
1.1 paf 62: private:
1.6 paf 63:
1.9 paf 64: Hash fhash;
1.13 paf 65: Value *fdefault;
1.6 paf 66:
1.1 paf 67: };
68:
69: #endif
E-mail: