--- parser3/src/classes/date.C 2023/11/26 16:02:41 1.115 +++ parser3/src/classes/date.C 2024/11/10 20:33:21 1.119 @@ -1,7 +1,7 @@ /** @file Parser: @b date parser class. - Copyright (c) 2001-2023 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) Authors: Konstantin Morshnev , Alexandr Petrosian */ @@ -14,7 +14,7 @@ #include "pa_vtable.h" #include "pa_vbool.h" -volatile const char * IDENT_DATE_C="$Id: date.C,v 1.115 2023/11/26 16:02:41 moko Exp $" IDENT_PA_VDATE_H; +volatile const char * IDENT_DATE_C="$Id: date.C,v 1.119 2024/11/10 20:33:21 moko Exp $" IDENT_PA_VDATE_H; // class @@ -43,8 +43,12 @@ public: } }; - -Table date_calendar_table_template(new Date_calendar_table_template_columns); +static Table &date_calendar_table_template(){ + static Table *singleton=NULL; + if(singleton==NULL) + singleton=new Table(new Date_calendar_table_template_columns); + return *singleton; +} // methods @@ -259,8 +263,8 @@ static void _create(Request& r, MethodPa vdate.set_tz(tz); vdate.set_tm(tmIn); } else { // ^create(float days) or ^create[date object] - if(Value* adate=params[0].as(VDATE_TYPE)) - vdate.set_tz(static_cast(adate)->get_tz()); + if(VDate* adate=dynamic_cast(¶ms[0])) + vdate.set_tz(adate->get_tz()); vdate.set_time(round(params.as_double(0, "float days must be double", r)*SECS_PER_DAY)); } } else { // ^create(y;m;d[;h[;m[;s[;TZ]]]]) @@ -394,7 +398,7 @@ static void _roll(Request& r, MethodPara static Table& fill_month_days(Request& r, MethodParams& params, bool rus){ Table::Action_options table_options; - Table& result=*new Table(date_calendar_table_template, table_options); + Table& result=*new Table(date_calendar_table_template(), table_options); tm tmIn; memset(&tmIn, 0, sizeof(tmIn));