Annotation of parser3/src/types/pa_vhash.h, revision 1.17
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.17 ! parser 7: $Id: pa_vhash.h,v 1.16 2001/09/06 08:25:08 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.17 ! parser 24:
! 25: /// VHash: count!=0
! 26: bool is_defined() const { return hash().size()!=0; }
1.1 paf 27:
1.11 paf 28: /// VHash: fhash
1.8 paf 29: Hash *get_hash() { return &fhash; }
1.14 paf 30:
31: /// VHash: 0
32: VStateless_class *get_class() { return 0; }
1.7 paf 33:
1.11 paf 34: /// VHash: (key)=value
1.1 paf 35: Value *get_element(const String& name) {
1.15 parser 36: // $CLASS,$method
1.13 paf 37: if(Value *result=VStateless_class::get_element(name))
38: return result;
39:
40: // $element
1.16 parser 41: if(Value *result=static_cast<Value *>(fhash.get(name)))
42: return result;
43:
44: // default value
45: return static_cast<Value *>(fhash.get(*hash_default_element_name));
1.1 paf 46: }
47:
1.11 paf 48: /// VHash: (key)=value
1.1 paf 49: void put_element(const String& name, Value *value) {
1.5 paf 50: fhash.put(name, value);
1.1 paf 51: }
52:
53: public: // usage
54:
1.13 paf 55: VHash(Pool& apool) : VStateless_class(apool, hash_base_class),
56: fhash(apool),
57: fdefault(0) {
58: }
1.7 paf 59:
60: Hash& hash() { return fhash; }
1.1 paf 61:
1.13 paf 62: void set_default(Value& adefault) { fdefault=&adefault; }
63: Value *get_default() { return fdefault; }
64:
1.1 paf 65: private:
1.6 paf 66:
1.9 paf 67: Hash fhash;
1.13 paf 68: Value *fdefault;
1.6 paf 69:
1.1 paf 70: };
71:
72: #endif
E-mail: