--- parser3/src/classes/math.C 2003/02/26 11:29:56 1.24.2.10 +++ parser3/src/classes/math.C 2003/03/24 09:39:53 1.24.2.12.2.5 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_MATH_C="$Date: 2003/02/26 11:29:56 $"; +static const char* IDENT_MATH_C="$Date: 2003/03/24 09:39:53 $"; #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 @@ -48,17 +52,16 @@ 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, MethodParams* params) { - ValuePtr range=params->as_junction(0, "range must be expression"); + Value* 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", method_name, "top must be above 1(%g)", top); - r.write_no_lang(ValuePtr(new VInt(_random(uint(top))))); + r.write_no_lang(Value*(new VInt(_random(uint(top))))); } @@ -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"); + Value* 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))); + r.write_no_lang(Value*(new VDouble(result))); } #define MATH1(name) \ - static void _##name(Request& r, StringPtr method_name, MethodParams* params) {\ + static void _##name(Request& r, 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, MethodParams* params) {\ math1(r, method_name, params, &name_c);\ } MATH1(round); MATH1(floor); MATH1P(ceiling, ceil); @@ -97,19 +100,19 @@ 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"); + Value* a=params->as_junction(0, "parameter must be expression"); + Value* b=params->as_junction(1, "parameter must be expression"); double result=func( r.process_to_value(a)->as_double(), r.process_to_value(b)->as_double()); - r.write_no_lang(ValuePtr(new VDouble(result))); + r.write_no_lang(Value*(new VDouble(result))); } #define MATH2(name) \ - static void _##name(Request& r, StringPtr method_name, MethodParams* params) {\ + static void _##name(Request& r, 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, 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,