Annotation of parser3/src/types/pa_vhash.h, revision 1.25
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.25 ! parser 7: $Id: pa_vhash.h,v 1.24 2001/10/19 12:43:30 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"
1.21 parser 16: #include "pa_vint.h"
1.1 paf 17:
1.13 paf 18: extern Methoded *hash_base_class;
19:
1.11 paf 20: /// value of type 'hash', implemented with Hash
1.13 paf 21: class VHash : public VStateless_class {
1.1 paf 22: public: // value
23:
1.2 paf 24: const char *type() const { return "hash"; }
1.17 parser 25:
1.19 parser 26: /// VHash: finteger
27: int as_int() const { return fhash.size(); }
28: /// VHash: finteger
29: double as_double() const { return as_int(); }
1.17 parser 30: /// VHash: count!=0
1.19 parser 31: bool is_defined() const { return as_int()!=0; }
1.23 parser 32: /// VHash: count!=0
33: bool as_bool() const { return is_defined(); }
1.20 parser 34: /// VHash: count
1.24 parser 35: Value *as_expr_result(bool ) { return NEW VInt(pool(), as_int()); }
1.1 paf 36:
1.11 paf 37: /// VHash: fhash
1.25 ! parser 38: Hash *get_hash(const String * /*source*/) { return &fhash; }
1.14 paf 39:
40: /// VHash: 0
41: VStateless_class *get_class() { return 0; }
1.7 paf 42:
1.11 paf 43: /// VHash: (key)=value
1.1 paf 44: Value *get_element(const String& name) {
1.15 parser 45: // $CLASS,$method
1.13 paf 46: if(Value *result=VStateless_class::get_element(name))
47: return result;
48:
49: // $element
1.16 parser 50: if(Value *result=static_cast<Value *>(fhash.get(name)))
51: return result;
52:
53: // default value
1.22 parser 54: return get_default();
1.1 paf 55: }
56:
1.11 paf 57: /// VHash: (key)=value
1.1 paf 58: void put_element(const String& name, Value *value) {
1.5 paf 59: fhash.put(name, value);
1.1 paf 60: }
61:
62: public: // usage
63:
1.13 paf 64: VHash(Pool& apool) : VStateless_class(apool, hash_base_class),
1.22 parser 65: fhash(apool) {
1.18 parser 66: }
67:
68: VHash(Pool& apool, const Hash& source) : VStateless_class(apool, hash_base_class),
1.22 parser 69: fhash(source) {
1.13 paf 70: }
1.7 paf 71:
72: Hash& hash() { return fhash; }
1.1 paf 73:
1.22 parser 74: void set_default(Value& adefault) {
75: fhash.put(*hash_default_element_name, &adefault);
76: }
77: Value *get_default() {
78: return static_cast<Value *>(fhash.get(*hash_default_element_name));
79: }
1.13 paf 80:
1.1 paf 81: private:
1.6 paf 82:
1.9 paf 83: Hash fhash;
1.6 paf 84:
1.1 paf 85: };
86:
87: #endif
E-mail: