Annotation of parser3/src/types/pa_vclass.h, revision 1.66

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.66    ! moko       11: #define IDENT_PA_VCLASS_H "$Id: pa_vclass.h,v 1.65 2016/04/01 16:27:32 moko Exp $"
1.40      paf        12: 
                     13: // includes
1.1       paf        14: 
1.8       paf        15: #include "pa_vstateless_class.h"
1.1       paf        16: #include "pa_vjunction.h"
                     17: 
1.13      paf        18: /**    stores 
1.55      misha      19: - static fields, getters & setters: VClass::ffields
1.13      paf        20: */
1.40      paf        21: class VClass: public VStateless_class {
1.1       paf        22: public: // Value
                     23:        
1.66    ! moko       24:        override const char* type() const {
        !            25:                if(!ftype)
        !            26:                        throw Exception(PARSER_RUNTIME, 0, "getting type of nameless class");
        !            27:                return ftype;
        !            28:        }
        !            29: 
1.20      parser     30:        /// VClass: true
1.40      paf        31:        override bool as_bool() const { return true; }
1.55      misha      32:        override Value* as(const char* atype);
1.1       paf        33: 
1.55      misha      34:        override Value* get_element(Value& aself, const String& aname);
1.61      moko       35:        override const VJunction* put_element(Value& self, const String& name, Value* value);
                     36:        // for VObject::put_element
                     37:        const VJunction* put_element_replace_only(Value& self, const String& name, Value* value);
                     38: 
1.63      misha      39:        override const String* get_json_string(Json_options& options);
                     40: 
1.55      misha      41:        override Value* create_new_value(Pool&);
1.8       paf        42: 
1.60      misha      43:        override HashStringValue *get_hash();
                     44:        override HashStringValue* get_fields() { return get_hash(); };
1.58      misha      45: 
1.55      misha      46: public: 
                     47:        
1.66    ! moko       48:        void set_type(const char *atype) { ftype=atype; }
        !            49: 
1.55      misha      50:        // VStateless_class
1.57      misha      51:        override void real_set_method(const String& aname, Method* amethod);
1.55      misha      52:        override HashStringProperty* get_properties(){ return &ffields; };
                     53:        override void set_base(VStateless_class* abase);
1.47      paf        54: 
1.62      moko       55:        /// VClass default getter & setter support
                     56:        override void enable_default_getter(){ state |= IS_GETTER_ACTIVE; }
                     57:        override void enable_default_setter(){ if(has_default_setter()) state |= IS_SETTER_ACTIVE; }
                     58:        override void disable_default_getter(){ state &= ~IS_GETTER_ACTIVE; }
                     59:        override void disable_default_setter(){ state &= ~IS_SETTER_ACTIVE; }
                     60:        override bool is_enabled_default_getter(){ return (state & IS_GETTER_ACTIVE) > 0; }
                     61:        override bool is_enabled_default_setter(){ return (state & IS_SETTER_ACTIVE) > 0; }
                     62: 
1.47      paf        63: private:
                     64: 
1.66    ! moko       65:        const char* ftype;
        !            66: 
1.62      moko       67:        enum State {
                     68:                IS_GETTER_ACTIVE = 0x01,
                     69:                IS_SETTER_ACTIVE = 0x02
                     70:        };
                     71: 
                     72:        int state; // default setter & getter state
                     73: 
                     74:        HashStringProperty ffields;
                     75: 
1.55      misha      76:        Property& get_property(const String& aname);
1.4       paf        77: 
1.62      moko       78: public:
1.1       paf        79: 
1.66    ! moko       80:        VClass(const char* atype=0) : ftype(atype), state(IS_GETTER_ACTIVE){}
1.25      paf        81: 
1.1       paf        82: };
                     83: 
                     84: #endif

E-mail: