File:  [parser3project] / parser3 / src / classes / classes.h
Revision 1.26: download - view: text, annotated - select for diffs - revision graph
Wed Feb 11 15:33:11 2004 UTC (22 years, 4 months ago) by paf
Branches: MAIN
CVS tags: release_3_1_5, release_3_1_4, release_3_1_3, release_3_1_2, HEAD
2004

/** @file
	Parser: @b Methoded class decl.

	Copyright (c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com)
	Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
*/

#ifndef CLASSES_H
#define CLASSES_H

static const char * const IDENT_CLASSES_H="$Date: 2004/02/11 15:33:11 $";

// 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 bool put_element(const String& /*name*/, Value * /*value*/, bool /*replace*/) { 
		return false; // fewer useless Exceptions
	}

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() =0;
	/// use this method to read parameters from root "auto.p"; access r.main_class
	virtual void configure_admin(Request& ) {}
	/// use this method to read parameters from 'MAIN' class; access r.main_class
	virtual void configure_user(Request& ) {}
	/// use it to construct static variables. check some static so that would be only ONCE!
	virtual void construct_statics() {}

public: // usage

	Methoded(const char* aname, VStateless_class* abase=0): 
		VStateless_class(new String(aname), abase) {
	}

	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, base) \
	Methoded* name##_class=self; \
	Methoded* name##_base_class=base

#endif

E-mail: