Diff for /parser3/src/classes/Attic/random.C between versions 1.1 and 1.13

version 1.1, 2001/04/02 08:43:41 version 1.13, 2001/06/28 07:41:59
Line 1 Line 1
 /** @file  /** @file
         Parser: random parser class.          Parser: @b random parser class.
   
         Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)          Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
   
Line 7 Line 7
   
         $Id$          $Id$
 */  */
   static char *RCSId="$Id$"; 
 #include <process.h>  
 #include <time.h>  
   
 #include "pa_config_includes.h"  #include "pa_config_includes.h"
 #include "pa_common.h"  #include "pa_common.h"
 #include "_random.h"  
 #include "pa_vint.h"  #include "pa_vint.h"
 #include "pa_request.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  // 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();          Pool& pool=r.pool();
   
     uint max=params->size()?          Value& range=params->get_junction(0, "range must be expression");
                 (uint)(r.process(*static_cast<Value *>(params->get(0)))).as_double():0;      uint max=params->size()?(uint)r.process(range).as_double():0;
     if(max<=0)       if(max<=1)
                 max=1000000;                  PTHROW(0, 0,
                           &method_name,
                           "bad range [0..%u]", max);
                   
         r.write_no_lang(*new(pool) VInt(pool, rand()%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          // setting seed
         srand(getpid()+time(NULL));  rand();          srand(getpid()+time(NULL));  rand();
                   
         // ^random.generate[]  
         // ^random.generate(range)          // ^random:generate[]
         vclass.add_native_method("generate", Method::CT_STATIC, _generate, 0, 1);          // ^random:generate(range)
           add_native_method("generate", Method::CT_STATIC, _generate, 1, 1);
   }
   
   // creator
   
   Methoded *MRandom_create(Pool& pool) {
           return new(pool) MRandom(pool);
 }  }

Removed from v.1.1  
changed lines
  Added in v.1.13


E-mail: