|
|
| version 1.87, 2001/04/28 13:25:01 | version 1.94.4.1, 2001/09/13 07:41:45 |
|---|---|
| Line 11 | Line 11 |
| #ifndef PA_REQUEST_H | #ifndef PA_REQUEST_H |
| #define PA_REQUEST_H | #define PA_REQUEST_H |
| #include "pa_config_includes.h" | |
| #include "pa_pool.h" | #include "pa_pool.h" |
| #include "pa_hash.h" | #include "pa_hash.h" |
| #include "pa_wcontext.h" | #include "pa_wcontext.h" |
| Line 20 | Line 21 |
| #include "pa_vobject.h" | #include "pa_vobject.h" |
| #include "pa_venv.h" | #include "pa_venv.h" |
| #include "pa_vform.h" | #include "pa_vform.h" |
| #include "pa_vmath.h" | |
| #include "pa_vrequest.h" | #include "pa_vrequest.h" |
| #include "pa_vresponse.h" | #include "pa_vresponse.h" |
| #include "pa_vcookie.h" | #include "pa_vcookie.h" |
| Line 79 public: | Line 81 public: |
| BEWARE: may throw exception to you: catch it! | BEWARE: may throw exception to you: catch it! |
| */ | */ |
| void core( | void core( |
| const char *root_auto_path, ///< path to system auto.p file | const char *root_config_filespec, ///< system config filespec |
| bool root_auto_fail, ///< fail if system auto.p file not found | bool root_config_fail_on_read_problem, ///< fail if system config file not found |
| const char *site_auto_path, ///< path to site auto.p file | const char *site_config_filespec, ///< site config filespec |
| bool site_auto_fail, ///< fail if site auto.p file not found | bool site_config_fail_on_read_problem, ///< fail if site config file not found |
| bool header_only); | bool header_only); |
| /// executes ops | /// executes ops |
| void execute(const Array& ops); | void execute(const Array& ops); // execute.C |
| /// compiles the file, maybe forcing it's class @a name and @a base_class. | /// compiles the file, maybe forcing it's class @a name and @a base_class. |
| VStateless_class *use_file( | VStateless_class *use_file( |
| const String& file_spec, bool fail_on_read_problem=true, | const String& file_name, |
| bool ignore_class_path=false, bool fail_on_read_problem=true, | |
| const String *name=0, | const String *name=0, |
| VStateless_class *base_class=0); // core.C | VStateless_class *base_class=0); // core.C |
| /// compiles a @a source buffer | /// compiles a @a source buffer |
| Line 151 public: | Line 154 public: |
| VEnv env; | VEnv env; |
| /// $form:elements | /// $form:elements |
| VForm form; | VForm form; |
| /// $math:constants | |
| VMath math; | |
| /// $request:elements | /// $request:elements |
| VRequest request; | VRequest request; |
| /// $response:elements | /// $response:elements |
| Line 177 public: | Line 182 public: |
| private: // core data | private: // core data |
| // classes | /// classes |
| Hash fclasses; | Hash fclasses; |
| // already used files to avoid cyclic uses | /// already used files to avoid cyclic uses |
| Hash used_files; | Hash used_files; |
| // execution stack | /// execution stack |
| Stack stack; | Stack stack; |
| /** endless execute(execute(... preventing counter | |
| @see ANTI_ENDLESS_EXECUTE_RECOURSION | |
| */ | |
| uint anti_endless_execute_recoursion; | |
| private: // compile.C | private: // compile.C |
| VStateless_class& real_compile(COMPILE_PARAMS); | VStateless_class& real_compile(COMPILE_PARAMS); |
| private: // execute.C | private: // execute.C |
| const String *execute_method(Value& aself, const Method& method, | const String *execute_method(Value& aself, |
| bool return_cstr=true); | const Method& method, bool return_cstr=true); |
| const String *execute_method(Value& aself, const String& method_name, | const String *execute_virtual_method(Value& aself, |
| bool return_cstr=true); | const String& method_name, bool return_cstr=true); |
| const String *execute_nonvirtual_method(VStateless_class& aclass, | |
| const String& method_name, bool return_cstr=true); | |
| Value *get_element(); | Value *get_element(); |
| Line 243 public: | Line 255 public: |
| } | } |
| }; | }; |
| /** | |
| @b method parameters passed in this array. | |
| contains handy typecast ad junction/not junction ensurers | |
| */ | |
| class MethodParams : public Array { | |
| public: | |
| MethodParams(Pool& pool, const String& amethod_name) : Array(pool), | |
| fmethod_name(amethod_name) { | |
| } | |
| /// handy typecast. I long for templates | |
| Value& get(int index) { | |
| return *static_cast<Value *>(Array::get(index)); | |
| } | |
| /// handy is-value-a-junction ensurer | |
| Value& as_junction(int index, const char *msg) { | |
| return get_as(index, true, msg); | |
| } | |
| /// handy value-is-not-a-junction ensurer | |
| Value& as_no_junction(int index, const char *msg) { | |
| return get_as(index, false, msg); | |
| } | |
| /// handy expression auto-processing to double | |
| double as_double(int index, Request& r) { | |
| return get_processed(index, r).as_double(); | |
| } | |
| /// handy expression auto-processing to int | |
| int as_int(int index, Request& r) { | |
| return get_processed(index, r).as_int(); | |
| } | |
| /// handy string ensurer | |
| const String& as_string(int index, const char *msg) { | |
| return as_no_junction(index, msg).as_string(); | |
| } | |
| private: | |
| /// handy value-is/not-a-junction ensurer | |
| Value& get_as(int index, bool as_junction, const char *msg) { | |
| Value& result=get(index); | |
| if((result.get_junction()!=0) ^ as_junction) | |
| THROW(0, 0, | |
| &fmethod_name, | |
| "%s (parameter #%d)", msg, 1+index); | |
| return result; | |
| } | |
| Value& get_processed(int index, Request& r) { | |
| return r.process(get(index), | |
| 0/*no name*/, | |
| false/*don't intercept string*/); | |
| } | |
| private: | |
| const String& fmethod_name; | |
| }; | |
| #endif | #endif |