Annotation of parser3/src/types/pa_vdate.h, revision 1.58

1.1       parser      1: /** @file
                      2:        Parser: @b date parser class decl.
                      3: 
1.53      moko        4:        Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com)
1.8       paf         5:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1       parser      6: */
                      7: 
                      8: #ifndef PA_VDATE_H
                      9: #define PA_VDATE_H
1.11      paf        10: 
1.58    ! moko       11: #define IDENT_PA_VDATE_H "$Id: pa_vdate.h,v 1.57 2015/08/15 22:51:17 moko Exp $"
1.1       parser     12: 
                     13: #include "classes.h"
                     14: #include "pa_common.h"
                     15: #include "pa_vstateless_object.h"
1.56      moko       16: #include "pa_vdouble.h"
1.1       parser     17: 
1.9       paf        18: // defines
                     19: 
                     20: #define VDATE_TYPE "date"
1.20      paf        21: 
1.58    ! moko       22: //#define PA_DATE64
        !            23: 
        !            24: #ifdef PA_DATE64
        !            25: #define pa_time_t time_t
        !            26: #else
        !            27: #define pa_time_t double
        !            28: #endif
        !            29: 
        !            30: #define SECS_PER_DAY 86400L
        !            31: 
1.9       paf        32: // externs
                     33: 
1.25      paf        34: extern Methoded* date_class;
1.1       parser     35: 
1.58    ! moko       36: /// value of type 'date'.
1.25      paf        37: class VDate: public VStateless_object {
1.1       parser     38: public: // Value
                     39: 
1.25      paf        40:        override const char* type() const { return VDATE_TYPE; }
                     41:        override VStateless_class *get_class() { return date_class; }
1.10      paf        42:        
1.51      misha      43:        /// VDate: json-string
1.56      moko       44:        override const String* get_json_string(Json_options& options);
1.51      misha      45: 
1.1       parser     46:        /// VDate: ftime -> float days
1.54      moko       47:        override Value& as_expr_result() { return *new VDouble(as_double()); }
1.1       parser     48: 
1.46      misha      49:        /// VDate: true
                     50:        override bool is_evaluated_expr() const { return true; }
                     51: 
1.1       parser     52:        /// VDate: ftime -> float days
1.25      paf        53:        override double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.46      misha      54: 
1.1       parser     55:        /// VDate: 0 or !0
1.25      paf        56:        override bool as_bool() const { return ftime!=0; }
1.1       parser     57: 
1.15      paf        58:        /// VDate: method,field
1.56      moko       59:        override Value* get_element(const String& aname);
1.1       parser     60: 
                     61: public: // usage
                     62: 
1.58    ! moko       63:        VDate(pa_time_t adate) : ftz_cstr(0) {
1.33      paf        64:                set_time(adate);
1.27      paf        65:        }
1.1       parser     66: 
1.58    ! moko       67:        VDate(tm &tmIn) : ftz_cstr(0) {
        !            68:                set_tm(tmIn);
1.32      paf        69:        }
                     70: 
1.58    ! moko       71:        void set_time(pa_time_t atime);
        !            72:        void set_tm(tm &tmIn);
        !            73:        void validate();
        !            74: 
        !            75:        void set_tz(const String* atz);
        !            76:        static void set_default_tz(const String* atz);
        !            77: 
        !            78:        pa_time_t get_time() const { return ftime; }
        !            79:        tm get_tm() const { return ftm; }
1.56      moko       80: 
1.58    ! moko       81:        enum sql_string_type {sql_string_datetime, sql_string_date, sql_string_time};
1.56      moko       82: 
1.58    ! moko       83:        const String* get_sql_string(sql_string_type format = sql_string_datetime);
        !            84:        const String* get_gmt_string();
1.40      paf        85: 
1.44      misha      86:        struct yw {
                     87:                int year;
                     88:                int week;
                     89:        }; 
                     90:        
1.57      moko       91:        static yw CalcWeek(tm& tms);
1.58    ! moko       92:        static int getMonthDays(int year, int month);
1.1       parser     93: 
                     94: private:
1.58    ! moko       95:        pa_time_t ftime;
        !            96:        tm ftm;
1.27      paf        97:        const char* ftz_cstr;
1.1       parser     98: 
                     99: };
                    100: 
                    101: #endif

E-mail: