--- parser3/src/classes/math.C 2003/02/20 14:53:33 1.24.2.9 +++ parser3/src/classes/math.C 2003/03/20 09:41:45 1.24.2.12.2.3 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_MATH_C="$Date: 2003/02/20 14:53:33 $"; +static const char* IDENT_MATH_C="$Date: 2003/03/20 09:41:45 $"; #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 @@ -41,16 +45,14 @@ public: // Methoded // global variables -MethodedPtr math_class(0); // fictive -MethodedPtr 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"); double top=r.process_to_value(range)->as_double(); @@ -69,7 +71,7 @@ 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"); @@ -78,11 +80,11 @@ static void math1(Request& r, } #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); @@ -98,7 +100,7 @@ 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"); @@ -110,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); @@ -130,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; @@ -155,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); @@ -170,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,