Annotation of parser3/src/types/pa_vclass.h, revision 1.67
1.13 paf 1: /** @file
1.14 paf 2: Parser: @b class parser class decl.
1.13 paf 3:
1.64 moko 4: Copyright (c) 2001-2015 Art. Lebedev Studio (http://www.artlebedev.com)
1.24 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 paf 6: */
7:
8: #ifndef PA_VCLASS_H
9: #define PA_VCLASS_H
1.26 paf 10:
1.67 ! moko 11: #define IDENT_PA_VCLASS_H "$Id: pa_vclass.h,v 1.66 2016/04/06 16:08:20 moko Exp $"
! 12:
! 13: #define OBJECT_PROTOTYPE
1.40 paf 14:
15: // includes
1.1 paf 16:
1.8 paf 17: #include "pa_vstateless_class.h"
1.1 paf 18: #include "pa_vjunction.h"
19:
1.13 paf 20: /** stores
1.55 misha 21: - static fields, getters & setters: VClass::ffields
1.13 paf 22: */
1.40 paf 23: class VClass: public VStateless_class {
1.1 paf 24: public: // Value
25:
1.66 moko 26: override const char* type() const {
27: if(!ftype)
28: throw Exception(PARSER_RUNTIME, 0, "getting type of nameless class");
29: return ftype;
30: }
31:
1.20 parser 32: /// VClass: true
1.40 paf 33: override bool as_bool() const { return true; }
1.55 misha 34: override Value* as(const char* atype);
1.1 paf 35:
1.55 misha 36: override Value* get_element(Value& aself, const String& aname);
1.61 moko 37: override const VJunction* put_element(Value& self, const String& name, Value* value);
38: // for VObject::put_element
39: const VJunction* put_element_replace_only(Value& self, const String& name, Value* value);
40:
1.63 misha 41: override const String* get_json_string(Json_options& options);
42:
1.55 misha 43: override Value* create_new_value(Pool&);
1.8 paf 44:
1.60 misha 45: override HashStringValue *get_hash();
46: override HashStringValue* get_fields() { return get_hash(); };
1.58 misha 47:
1.67 ! moko 48: public:
! 49:
! 50: #ifdef OBJECT_PROTOTYPE
! 51: static bool prototype;
! 52: #endif
! 53:
1.66 moko 54: void set_type(const char *atype) { ftype=atype; }
55:
1.55 misha 56: // VStateless_class
1.57 misha 57: override void real_set_method(const String& aname, Method* amethod);
1.55 misha 58: override HashStringProperty* get_properties(){ return &ffields; };
59: override void set_base(VStateless_class* abase);
1.47 paf 60:
1.62 moko 61: /// VClass default getter & setter support
62: override void enable_default_getter(){ state |= IS_GETTER_ACTIVE; }
63: override void enable_default_setter(){ if(has_default_setter()) state |= IS_SETTER_ACTIVE; }
64: override void disable_default_getter(){ state &= ~IS_GETTER_ACTIVE; }
65: override void disable_default_setter(){ state &= ~IS_SETTER_ACTIVE; }
66: override bool is_enabled_default_getter(){ return (state & IS_GETTER_ACTIVE) > 0; }
67: override bool is_enabled_default_setter(){ return (state & IS_SETTER_ACTIVE) > 0; }
68:
1.47 paf 69: private:
70:
1.66 moko 71: const char* ftype;
72:
1.62 moko 73: enum State {
74: IS_GETTER_ACTIVE = 0x01,
75: IS_SETTER_ACTIVE = 0x02
76: };
77:
78: int state; // default setter & getter state
79:
80: HashStringProperty ffields;
81:
1.55 misha 82: Property& get_property(const String& aname);
1.4 paf 83:
1.62 moko 84: public:
1.1 paf 85:
1.66 moko 86: VClass(const char* atype=0) : ftype(atype), state(IS_GETTER_ACTIVE){}
1.25 paf 87:
1.1 paf 88: };
89:
90: #endif
E-mail: