Diff for /parser3/src/classes/int.C between versions 1.61 and 1.74

version 1.61, 2012/04/19 19:41:29 version 1.74, 2026/01/06 16:36:39
Line 1 Line 1
 /** @file  /** @file
         Parser: @b int parser class.          Parser: @b int parser class.
   
         Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com)          Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com)
         Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)          Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
 */  */
   
 #include "classes.h"  #include "classes.h"
Line 28  public: Line 28  public:
   
 // global variable  // global variable
   
 DECLARE_CLASS_VAR(int, new MInt, 0);  DECLARE_CLASS_VAR(int, new MInt);
   
 // methods  // methods
   
 static void _int(Request& r, MethodParams& params) {  static void _int(Request& r, MethodParams&) {
         // just checking (default) syntax validity, never really using it here, just for string.int compatibility  
         if(params.count()>0)  
                 params.as_int(0, "default must be int", r);  
   
         VInt& vint=GET_SELF(r, VInt);          VInt& vint=GET_SELF(r, VInt);
         r.write_no_lang(*new VInt(vint.get_int()));          r.write(*new VInt(vint.get_int()));
 }  }
   
 static void _double(Request& r, MethodParams& params) {  static void _double(Request& r, MethodParams&) {
         // just checking (default) syntax validity, never really using it here, just for string.double compatibility  
         if(params.count()>0)  
                 params.as_double(0, "default must be double", r);  
   
         VInt& vint=GET_SELF(r, VInt);          VInt& vint=GET_SELF(r, VInt);
         r.write_no_lang(*new VDouble(vint.as_double()));          r.write(*new VDouble(vint.as_double()));
 }  }
   
 static void _bool(Request& r, MethodParams& params) {  static void _bool(Request& r, MethodParams&) {
         // just checking (default) syntax validity, never really using it here, just for string.bool compatibility  
         if(params.count()>0)  
                 params.as_bool(0, "default must be bool", r);  
   
         VInt& vint=GET_SELF(r, VInt);          VInt& vint=GET_SELF(r, VInt);
         r.write_no_lang(VBool::get(vint.as_bool()));          r.write(VBool::get(vint.as_bool()));
 }  }
   
 typedef void (*vint_op_func_ptr)(VInt& vint, double param);  typedef void (*vint_op_func_ptr)(VInt& vint, double param);
   
 static void __inc(VInt& vint, double param) { vint.inc((int)param); }  static void __inc(VInt& vint, double param) { vint.inc(clip2wint(param)); }
 static void __dec(VInt& vint, double param) { vint.inc((int)-param); }  static void __dec(VInt& vint, double param) { vint.inc(clip2wint(-param)); }
 static void __mul(VInt& vint, double param) { vint.mul(param); }  static void __mul(VInt& vint, double param) { vint.mul(param); }
 static void __div(VInt& vint, double param) { vint.div(param); }  static void __div(VInt& vint, double param) { vint.div(param); }
 static void __mod(VInt& vint, double param) { vint.mod((int)param); }  static void __mod(VInt& vint, double param) { vint.mod(clip2wint(param)); }
   
 static void vint_op(Request& r, MethodParams& params,   static void vint_op(Request& r, MethodParams& params, vint_op_func_ptr func) {
                                          vint_op_func_ptr func) {  
         VInt& vint=GET_SELF(r, VInt);          VInt& vint=GET_SELF(r, VInt);
         double param=params.count()?params.as_double(0, "param must be numerical", r):1;          double param=params.count()?params.as_double(0, "param must be numerical", r):1;
         (*func)(vint, param);          (*func)(vint, param);
Line 84  static void _mod(Request& r, MethodParam Line 71  static void _mod(Request& r, MethodParam
 extern const String* sql_result_string(Request& r, MethodParams& params, Value*& default_code);  extern const String* sql_result_string(Request& r, MethodParams& params, Value*& default_code);
   
 static void _sql(Request& r, MethodParams& params) {  static void _sql(Request& r, MethodParams& params) {
         int val;          pa_wint val;
         Value* default_code=0;          Value* default_code=0;
         if(const String* string=sql_result_string(r, params, default_code))          if(const String* string=sql_result_string(r, params, default_code))
                 val=string->as_int();                  val=string->as_wint();
         else          else
                 if(default_code)                  if(default_code)
                         val=r.process_to_value(*default_code).as_int();                          val=r.process(*default_code).as_wint();
                 else {                  else {
                         throw Exception(PARSER_RUNTIME,                          throw Exception(PARSER_RUNTIME, 0, "produced no result, but no default option specified");
                                 0,  
                                 "produced no result, but no default option specified");  
                 }                  }
         r.write_no_lang(*new VInt(val));          r.write(*new VInt(val));
 }  }
   
 // constructor  // constructor
   
 MInt::MInt(): Methoded("int") {  MInt::MInt(): Methoded("int") {
         // ^int.int[]          // ^int.int[]
           // ^int.int[default for ^string.int compatibility]
         add_native_method("int", Method::CT_DYNAMIC, _int, 0, 1);          add_native_method("int", Method::CT_DYNAMIC, _int, 0, 1);
   
         // ^int.double[]          // ^int.double[]
           // ^int.double[default for ^string.double compatibility]
         add_native_method("double", Method::CT_DYNAMIC, _double, 0, 1);          add_native_method("double", Method::CT_DYNAMIC, _double, 0, 1);
           // ^int.bool[]
         // ^double.bool[]          // ^int.bool[default for ^string.bool compatibility]
         add_native_method("bool", Method::CT_DYNAMIC, _bool, 0, 1);          add_native_method("bool", Method::CT_DYNAMIC, _bool, 0, 1);
   
         // ^int.inc[]           // ^int.inc[] 

Removed from v.1.61  
changed lines
  Added in v.1.74


E-mail: