|
|
| version 1.2, 2001/04/28 08:45:15 | version 1.35, 2024/11/11 05:50:09 |
|---|---|
| Line 1 | Line 1 |
| /** @file | /** @file |
| Parser: @b Methoded and Methoded_array classes. | Parser: @b Methoded and Methoded_array classes. |
| Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) | Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) |
| Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru> | |
| Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf) | |
| $Id$ | |
| */ | */ |
| #include "classes.h" | #include "classes.h" |
| #include "pa_request.h" | #include "pa_request.h" |
| volatile const char * IDENT_CLASSES_C="$Id$" IDENT_CLASSES_H; | |
| // Methoded | // Methoded |
| void Methoded::register_directly_used(Request& r) { | void Methoded::register_directly_used(Request& r) { |
| if(used_directly()) | if(used_directly()) |
| r.classes().put(name(), this); | r.put_class(this); |
| // prevent system classes from modification [calling set_method] | |
| // ^process[$string:CLASS]{@method} prohibited from now on... | |
| this->lock(); | |
| } | } |
| // Methoded_array | // Methoded_array |
| // global variable | // global variable |
| Methoded_array *methoded_array; | Methoded_array& methoded_array() { |
| static Methoded_array* result=0; | |
| if(!result) | |
| result=new Methoded_array; | |
| // methods | return *result; |
| Methoded_array::Methoded_array(Pool& apool) : Array(apool) { | |
| # include "classes.inc" | |
| } | } |
| static void configure_one(Array::Item *value, void *info) { | // methods |
| Request& r=*static_cast<Request *>(info); | |
| Methoded *methoded=static_cast<Methoded *>(value); | |
| methoded->configure(r); | |
| } | |
| void Methoded_array::configure(Request& r) { | Methoded_array::Methoded_array() { |
| for_each(configure_one, &r); | ADD_CLASS_VAR(array) |
| ADD_CLASS_VAR(bool) | |
| ADD_CLASS_VAR(curl) | |
| ADD_CLASS_VAR(date) | |
| ADD_CLASS_VAR(double) | |
| ADD_CLASS_VAR(file) | |
| ADD_CLASS_VAR(form) | |
| ADD_CLASS_VAR(hash) | |
| ADD_CLASS_VAR(hashfile) | |
| ADD_CLASS_VAR(image) | |
| ADD_CLASS_VAR(inet) | |
| ADD_CLASS_VAR(int) | |
| ADD_CLASS_VAR(json) | |
| ADD_CLASS_VAR(mail) | |
| ADD_CLASS_VAR(math) | |
| ADD_CLASS_VAR(memcached) | |
| ADD_CLASS_VAR(memory) | |
| ADD_CLASS_VAR(reflection) | |
| ADD_CLASS_VAR(regex) | |
| ADD_CLASS_VAR(response) | |
| ADD_CLASS_VAR(string) | |
| ADD_CLASS_VAR(table) | |
| ADD_CLASS_VAR(void) | |
| #ifdef XML | |
| ADD_CLASS_VAR(xnode) // should be before xdoc | |
| ADD_CLASS_VAR(xdoc) | |
| #endif | |
| } | |
| static void configure_admin_one(Methoded_array::element_type methoded, Request *r) { | |
| methoded->configure_admin(*r); | |
| } | |
| void Methoded_array::configure_admin(Request& r) { | |
| for_each(configure_admin_one, &r); | |
| } | |
| static void configure_user_one(Methoded_array::element_type methoded, Request *r) { | |
| methoded->configure_user(*r); | |
| } | } |
| void Methoded_array::configure_user(Request& r) { | |
| static void register_one(Array::Item *value, void *info) { | for_each(configure_user_one, &r); |
| Request& r=*static_cast<Request *>(info); | |
| Methoded *methoded=static_cast<Methoded *>(value); | |
| methoded->register_directly_used(r); | |
| } | } |
| static void register_one(Methoded_array::element_type methoded, Request *r) { | |
| methoded->register_directly_used(*r); | |
| } | |
| void Methoded_array::register_directly_used(Request& r) { | void Methoded_array::register_directly_used(Request& r) { |
| for_each(register_one, &r); | for_each(register_one, &r); |
| } | } |
| // creator | |
| void init_methoded_array(Pool& pool) { | |
| methoded_array=new(pool) Methoded_array(pool); | |
| } |