Annotation of parser3/src/types/pa_method.h, revision 1.1.2.1

1.1.2.1 ! paf         1: /** @file
        !             2:        Parser: Method class decl.
        !             3: 
        !             4:        Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
        !             5:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
        !             6: */
        !             7: 
        !             8: #ifndef PA_METHOD_H
        !             9: #define PA_METHOD_H
        !            10: 
        !            11: static const char* IDENT_METHOD_H="$Date: 2003/02/03 11:46:48 $";
        !            12: 
        !            13: #include "pa_pool.h"
        !            14: /*#include "pa_string.h"
        !            15: #include "pa_array.h"
        !            16: #include "pa_exception.h"
        !            17: */
        !            18: #include "pa_operation.h"
        !            19: 
        !            20: /**
        !            21:        native code method
        !            22:        params can be NULL when 
        !            23:        method min&max params (see VStateless_class::add_native_method)
        !            24:        counts are zero.        
        !            25: */
        !            26: typedef void (*NativeCodePtr)(Request& request, 
        !            27:                                                                StringPtr method_name, 
        !            28:                                                                MethodParams& params);
        !            29: 
        !            30: 
        !            31: typedef Array<StringPtr> ArrayString; DECLARE_OBJECT_PTR(ArrayString);
        !            32: 
        !            33: /** 
        !            34:        class method.
        !            35: 
        !            36:        methods can have 
        !            37:        - named or
        !            38:        - numbered parameters
        !            39: 
        !            40:        methods can be
        !            41:        - parser or 
        !            42:        - native onces
        !            43: 
        !            44:        holds
        !            45:        - parameter names or number limits
        !            46:        - local names
        !            47:        - code [parser or native]
        !            48: */
        !            49: class Method: public PA_Object {
        !            50: public:
        !            51: 
        !            52:        /// allowed method call types
        !            53:        enum Call_type {
        !            54:                CT_ANY, ///< method can be called either statically or dynamically
        !            55:                CT_STATIC, ///< method can be called only statically
        !            56:                CT_DYNAMIC ///< method can be called only dynamically
        !            57:        };
        !            58:        
        !            59:        /// name for error reporting
        !            60:        StringPtr name;
        !            61:        ///
        !            62:        Call_type call_type;
        !            63:        //@{
        !            64:        /// @name either numbered params // for native-code methods = operators
        !            65:        int min_numbered_params_count, max_numbered_params_count;
        !            66:        //@}
        !            67:        //@{
        !            68:        /// @name or named params&locals // for parser-code methods
        !            69:        ArrayStringPtr params_names;  ArrayStringPtr locals_names;
        !            70:        //@}
        !            71:        //@{
        !            72:        /// @name the Code
        !            73:        ArrayOperationPtr parser_code;/*OR*/NativeCodePtr native_code;
        !            74:        //@}
        !            75: 
        !            76:        Method::Method(
        !            77:                StringPtr aname,
        !            78:                Call_type call_type,
        !            79:                int amin_numbered_params_count, int amax_numbered_params_count,
        !            80:                ArrayStringPtr aparams_names, ArrayStringPtr alocals_names,
        !            81:                ArrayOperationPtr aparser_code, NativeCodePtr anative_code) : 
        !            82: 
        !            83:                name(aname),
        !            84:                call_type(call_type),
        !            85:                min_numbered_params_count(amin_numbered_params_count),
        !            86:                max_numbered_params_count(amax_numbered_params_count),
        !            87:                params_names(aparams_names), locals_names(alocals_names),
        !            88:                parser_code(aparser_code), native_code(anative_code) {
        !            89:        }
        !            90: 
        !            91:        /// call this before invoking to ensure proper actual numbered params count
        !            92:        void check_actual_numbered_params(
        !            93:                Value& self, StringPtr actual_name, MethodParams& actual_numbered_params) const;
        !            94: };
        !            95: 
        !            96: ///    Auto-object used for temporarily substituting/removing elements
        !            97: class Temp_value_element {
        !            98:        Value& fwhere;
        !            99:        StringPtr fname;
        !           100:        ValuePtr saved;
        !           101: public:
        !           102:        Temp_value_element(Value& awhere, StringPtr aname, ValuePtr awhat) : 
        !           103:                fwhere(awhere),
        !           104:                fname(aname),
        !           105:                saved(awhere.get_element(aname, awhere, false)) {
        !           106:                fwhere.put_element(aname, awhat, false);
        !           107:        }
        !           108:        ~Temp_value_element() { 
        !           109:                fwhere.put_element(fname, saved, false);
        !           110:        }
        !           111: };
        !           112: 
        !           113: 
        !           114: #endif
        !           115:  

E-mail: