--- parser3/src/classes/Attic/random.C 2001/04/02 08:49:38 1.2 +++ parser3/src/classes/Attic/random.C 2001/06/28 07:41:59 1.13 @@ -1,48 +1,64 @@ /** @file - Parser: random parser class. + Parser: @b random parser class. Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: random.C,v 1.2 2001/04/02 08:49:38 paf Exp $ + $Id: random.C,v 1.13 2001/06/28 07:41:59 parser Exp $ */ - -#include -#include +static char *RCSId="$Id: random.C,v 1.13 2001/06/28 07:41:59 parser Exp $"; #include "pa_config_includes.h" #include "pa_common.h" -#include "_random.h" #include "pa_vint.h" #include "pa_request.h" -// global var +// defines + +#define RANDOM_CLASS_NAME "random" + +// class -VStateless_class *random_class; +class MRandom : public Methoded { +public: + MRandom(Pool& pool); +public: // Methoded + bool used_directly() { return true; } +}; // methods -static void _generate(Request& r, const String& method_name, Array *params) { +static void _generate(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); - uint max=params->size()? - (uint)(r.process(*static_cast(params->get(0)))).as_double():0; + Value& range=params->get_junction(0, "range must be expression"); + uint max=params->size()?(uint)r.process(range).as_double():0; if(max<=1) - RTHROW(0, 0, + PTHROW(0, 0, &method_name, "bad range [0..%u]", max); r.write_no_lang(*new(pool) VInt(pool, rand()%max)); } -// initialize +// constructor + +MRandom::MRandom(Pool& apool) : Methoded(apool) { + set_name(*NEW String(pool(), RANDOM_CLASS_NAME)); + -void initialize_random_class(Pool& pool, VStateless_class& vclass) { // setting seed srand(getpid()+time(NULL)); rand(); - // ^random.generate[] - // ^random.generate(range) - vclass.add_native_method("generate", Method::CT_STATIC, _generate, 0, 1); + + // ^random:generate[] + // ^random:generate(range) + add_native_method("generate", Method::CT_STATIC, _generate, 1, 1); +} + +// creator + +Methoded *MRandom_create(Pool& pool) { + return new(pool) MRandom(pool); }