Annotation of parser3/src/types/pa_vobject.h, revision 1.71
1.6 paf 1: /** @file
1.7 paf 2: Parser: @b object class decl.
3:
1.69 moko 4: Copyright (c) 2001-2023 Art. Lebedev Studio (http://www.artlebedev.com)
5: Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
1.1 paf 6: */
7:
8: #ifndef PA_VOBJECT_H
9: #define PA_VOBJECT_H
10:
1.71 ! moko 11: #define IDENT_PA_VOBJECT_H "$Id: pa_vobject.h,v 1.70 2024/03/15 18:50:58 moko Exp $"
1.39 paf 12:
13: // includes
1.19 paf 14:
1.1 paf 15: #include "pa_vjunction.h"
16: #include "pa_vclass.h"
1.4 paf 17: #include "pa_vstateless_object.h"
1.39 paf 18: #include "pa_vfile.h"
1.6 paf 19:
1.23 paf 20: // defines
21:
22: #define BASE_NAME "BASE"
23:
1.26 paf 24: /** parser class instance, stores
25: - class VObject::fclass;
26: - fields VObject::ffields (dynamic, not static, which are stored in class).
1.6 paf 27: */
1.53 misha 28: class VObject: public Value {
1.39 paf 29:
1.61 moko 30: VClass& fclass;
1.53 misha 31: HashStringValue ffields;
1.39 paf 32:
1.56 moko 33: enum State {
34: IS_GETTER_ACTIVE = 0x01,
35: IS_SETTER_ACTIVE = 0x02
36: };
37:
38: int state; // default setter & getter state
39:
1.1 paf 40: public: // Value
41:
1.65 moko 42: const char* type() const { return fclass.type(); }
1.71 ! moko 43: override bool is(const char* atype);
1.12 parser 44:
1.25 paf 45: /// VObject: fclass
1.39 paf 46: override VStateless_class *get_class() { return &fclass; }
47:
48: override bool is_defined() const;
1.58 moko 49: override Value& as_expr_result();
1.39 paf 50: override int as_int() const;
1.49 misha 51: override double as_double() const;
1.39 paf 52: override bool as_bool() const;
1.70 moko 53: override VFile* as_vfile();
1.33 paf 54:
1.39 paf 55: override HashStringValue* get_hash();
56: override Table *get_table();
1.55 misha 57: override HashStringValue* get_fields() { return &ffields; }
1.66 moko 58: override HashStringValue* get_fields_reference() { return &ffields; }
1.33 paf 59:
1.53 misha 60: override Value* get_element(const String& aname);
1.61 moko 61: override const VJunction* put_element(const String& name, Value* value);
1.63 moko 62: #ifdef FEATURE_GET_ELEMENT4CALL
63: override Value* get_element4call(const String& aname);
64: #endif
1.24 paf 65:
1.59 moko 66: override const String* get_json_string(Json_options& options);
67:
1.56 moko 68: /// VObject default getter & setter support
69: override void enable_default_getter(){ state |= IS_GETTER_ACTIVE; }
70: override void enable_default_setter(){ if(fclass.has_default_setter()) state |= IS_SETTER_ACTIVE; }
71: override void disable_default_getter(){ state &= ~IS_GETTER_ACTIVE; }
72: override void disable_default_setter(){ state &= ~IS_SETTER_ACTIVE; }
73: override bool is_enabled_default_getter(){ return (state & IS_GETTER_ACTIVE) > 0; }
1.62 moko 74: override bool is_enabled_default_setter(){ return (state & IS_SETTER_ACTIVE) > 0; }
1.56 moko 75:
1.1 paf 76: public: // creation
77:
1.61 moko 78: VObject(VClass& aclass): fclass(aclass), state(IS_GETTER_ACTIVE){}
1.1 paf 79:
80: private:
81:
1.60 moko 82: Value* get_scalar_value(const char* as_something) const;
1.56 moko 83: };
84:
85: /// Auto-objects used for temporarily disabling setter/getter
86:
87: class Temp_disable_default_getter {
88: Value& fwhere;
89: public:
90: Temp_disable_default_getter(Value& awhere) : fwhere(awhere) {
91: fwhere.disable_default_getter();
92: }
93: ~Temp_disable_default_getter() {
94: fwhere.enable_default_getter();
95: }
96: };
1.49 misha 97:
1.56 moko 98: class Temp_disable_default_setter {
99: Value& fwhere;
100: public:
101: Temp_disable_default_setter(Value& awhere) : fwhere(awhere) {
102: fwhere.disable_default_setter();
103: }
104: ~Temp_disable_default_setter() {
105: fwhere.enable_default_setter();
106: }
1.1 paf 107: };
108:
109: #endif
E-mail: