/** @file
Parser: @b Methoded class decl.
Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com)
Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
*/
#ifndef CLASSES_H
#define CLASSES_H
#define IDENT_CLASSES_H "$Id: classes.h,v 1.49 2026/05/28 14:33:49 moko Exp $"
// include
#include "pa_vstateless_class.h"
#include "pa_array.h"
/** Pure virtual base for configurable Methoded descendants
@see Methoded_array
*/
class Methoded: public VStateless_class {
public: // Value
override const char* type() const { return ftype; }
public: // Methoded
/** should Methoded_array::register_directly_used register this class in
Request::classes() or not.
if not - global variable with Methoded descendant
is used in VStateless_class parameter
*/
virtual bool used_directly() { return true; }
/// use this method to read parameters from root "auto.p"; access r.main_class
virtual void configure_admin(Request& ) {}
private:
const char* ftype;
public: // usage
Methoded(const char* atype): ftype(atype){}
void register_directly_used(Request& r);
};
/// all Methoded registered here in autogenerated classes.C
class Methoded_array: public Array<Methoded*> {
public:
Methoded_array();
public: // Methoded for_each-es
/// @see Methoded::configure_admin
void configure_admin(Request& r);
/// @see Methoded::configure_user
void configure_user(Request& r);
/// @see Methoded::register_directly_used
void register_directly_used(Request& r);
};
// globals
Methoded_array& methoded_array();
// defines
#define DECLARE_CLASS_VAR(name, self) \
Methoded* name##_class=NULL; \
Methoded* name##_instance(){ if(!name##_class){ name##_class=self; } return name##_class; }
#define ADD_CLASS_VAR(name) \
extern Methoded* name##_instance(); \
*this+=name##_instance();
#endif
E-mail: