--- parser3/src/classes/math.C 2003/02/06 11:56:31 1.24.2.6 +++ parser3/src/classes/math.C 2003/03/18 16:00:06 1.24.2.12.2.2 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_MATH_C="$Date: 2003/02/06 11:56:31 $"; +static const char* IDENT_MATH_C="$Date: 2003/03/18 16:00:06 $"; #include "pa_vmethod_frame.h" @@ -20,8 +20,12 @@ static const char* IDENT_MATH_C="$Date: # include #endif -#ifdef HAVE_CRYPT_H -#include +#ifdef HAVE_CRYPT +# ifdef HAVE_CRYPT_H +# include +# endif +#else + extern char *crypt(const char *, const char *); #endif // defines @@ -30,7 +34,7 @@ static const char* IDENT_MATH_C="$Date: // class -class MMath : public Methoded { +class MMath: public Methoded { public: MMath(); void configure_admin(Request& r); @@ -41,17 +45,16 @@ public: // Methoded // global variables -VStateless_classPtr math_base_class(new MMath); +DECLARE_CLASS_VAR(math, 0 /*fictive*/, new MMath); // methods static unsigned int randomizer=0; static inline int _random(uint top) { return (int)(((double)((randomizer=rand())% RAND_MAX)) / RAND_MAX * top ); } -static void _random(Request& r, StringPtr method_name, MethodParams& params) { - Pool& pool=r.pool(); +static void _random(Request& r, const String& method_name, MethodParams* params) { - ValuePtr range=params.as_junction(0, "range must be expression"); + ValuePtr range=params->as_junction(0, "range must be expression"); double top=r.process_to_value(range)->as_double(); if(top<=1) throw Exception("parser.runtime", @@ -68,20 +71,20 @@ static double degrees(double param) { re static double radians(double param) { return param /180 *PI; } static void math1(Request& r, - StringPtr method_name, MethodParams& params, + const String& method_name, MethodParams* params, math1_func_ptr func) { - ValuePtr param=params.as_junction(0, "parameter must be expression"); + ValuePtr param=params->as_junction(0, "parameter must be expression"); double result=func(r.process_to_value(param)->as_double()); r.write_no_lang(ValuePtr(new VDouble(result))); } #define MATH1(name) \ - static void _##name(Request& r, StringPtr method_name, MethodParams& params) {\ + static void _##name(Request& r, const String& method_name, MethodParams* params) {\ math1(r, method_name, params, &name);\ } #define MATH1P(name_parser, name_c) \ - static void _##name_parser(Request& r, StringPtr method_name, MethodParams& params) {\ + static void _##name_parser(Request& r, const String& method_name, MethodParams* params) {\ math1(r, method_name, params, &name_c);\ } MATH1(round); MATH1(floor); MATH1P(ceiling, ceil); @@ -97,10 +100,10 @@ MATH1(sqrt); typedef double (*math2_func_ptr)(double, double); static void math2(Request& r, - StringPtr method_name, MethodParams& params, + const String& method_name, MethodParams* params, math2_func_ptr func) { - ValuePtr a=params.as_junction(0, "parameter must be expression"); - ValuePtr b=params.as_junction(1, "parameter must be expression"); + ValuePtr a=params->as_junction(0, "parameter must be expression"); + ValuePtr b=params->as_junction(1, "parameter must be expression"); double result=func( r.process_to_value(a)->as_double(), @@ -109,7 +112,7 @@ static void math2(Request& r, } #define MATH2(name) \ - static void _##name(Request& r, StringPtr method_name, MethodParams& params) {\ + static void _##name(Request& r, const String& method_name, MethodParams* params) {\ math2(r, method_name, params, &name);\ } MATH2(pow); @@ -129,10 +132,9 @@ static size_t calc_prefix_size(const cha } else return 0; } -static void _crypt(Request& r, StringPtr method_name, MethodParams& params) { - Pool& pool=r.pool(); - CharPtr password=params.as_string(0, "password must be string")->cstr(); - CharPtr maybe_bodyless_salt=params.as_string(1, "salt must be string")->cstr(); +static void _crypt(Request& r, const String& method_name, MethodParams* params) { + const char* password=params->as_string(0, "password must be string")->cstr(); + const char* maybe_bodyless_salt=params->as_string(1, "salt must be string")->cstr(); size_t prefix_size=calc_prefix_size(maybe_bodyless_salt); const char* normal_salt; @@ -154,7 +156,7 @@ static void _crypt(Request& r, StringPtr */ if(strncmp(normal_salt, PA_MD5PW_ID, PA_MD5PW_IDLEN) == 0) { const size_t sample_size=120; - char *sample_buf=new(pool) char[sample_size]; + char *sample_buf=new char[sample_size]; pa_MD5Encode((const unsigned char *)password.get(), (const unsigned char *)normal_salt, sample_buf, sample_size); String sample(sample_buf); @@ -169,7 +171,7 @@ static void _crypt(Request& r, StringPtr method_name, "on this platform does not support '%.*s' salt prefix", prefix_size, normal_salt); - r.write_pass_lang(StringPtr(new String(pool.copy(static_sample_buf)))); + r.write_pass_lang(String(pool.copy(static_sample_buf))); #else throw Exception("parser.runtime", method_name,