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

1.1       parser      1: /** @file
                      2:        Parser: @b date parser class decl.
                      3: 
1.24.2.3  paf         4:        Copyright (c) 2001-2003 ArtLebedev Group (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.24.2.5.2.2! paf        11: static const char* IDENT_VDATE_H="$Date: 2003/03/18 15:14:21 $";
1.1       parser     12: 
                     13: #include "classes.h"
                     14: #include "pa_common.h"
                     15: #include "pa_vstateless_object.h"
                     16: #include "pa_vint.h"
                     17: 
1.9       paf        18: // defines
                     19: 
                     20: #define VDATE_TYPE "date"
1.20      paf        21: 
1.9       paf        22: // externs
                     23: 
1.24.2.5.2.2! paf        24: extern Methoded* date_class;
1.1       parser     25: 
                     26: /// value of type 'date'. implemented with @c time_t
1.24.2.5  paf        27: class VDate: public VStateless_object {
1.1       parser     28: public: // Value
                     29: 
1.24.2.3  paf        30:        override const char* type() const { return VDATE_TYPE; }
1.24.2.5.2.2! paf        31:        override VStateless_class *get_class() { return date_class; }
1.10      paf        32:        
1.1       parser     33:        /// VDate: ftime -> float days
1.24.2.5.2.2! paf        34:        override Value* as_expr_result(bool return_string_as_is=false) {
        !            35:                return Value*(new VDouble(as_double()));
1.1       parser     36:        }
                     37: 
                     38:        /// VDate: ftime -> float days
1.24.2.1  paf        39:        override double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1       parser     40:        /// VDate: 0 or !0
1.24.2.1  paf        41:        override bool as_bool() const { return ftime!=0; }
1.1       parser     42: 
                     43: 
1.15      paf        44:        /// VDate: method,field
1.24.2.5.2.2! paf        45:        override Value* get_element(const String& aname, Value& aself, bool looking_up) {
1.15      paf        46:                // $method
1.24.2.5.2.2! paf        47:                if(Value* result=VStateless_object::get_element(aname, aself, looking_up))
1.1       parser     48:                        return result;
                     49: 
                     50:                // $year month day  hour minute second  weekday
                     51:                tm *tmOut=localtime(&ftime);
                     52:                int result;
1.24.2.5.2.2! paf        53:                if(aname=="year") result=1900+tmOut->tm_year;
        !            54:                else if(aname=="month") result=1+tmOut->tm_mon;
        !            55:                else if(aname=="day") result=tmOut->tm_mday;
        !            56:                else if(aname=="hour") result=tmOut->tm_hour;
        !            57:                else if(aname=="minute") result=tmOut->tm_min;
        !            58:                else if(aname=="second") result=tmOut->tm_sec;
        !            59:                else if(aname=="weekday") result=tmOut->tm_wday;
        !            60:                else if(aname=="yearday") result=tmOut->tm_yday;
        !            61:                else if(aname=="daylightsaving") result=tmOut->tm_isdst;
        !            62:                else { bark("%s field not found", 0, aname); return 0; }
        !            63:                return Value*(new VInt(result));
1.1       parser     64:        }
                     65: 
                     66: public: // usage
                     67: 
1.24.2.1  paf        68:        VDate(time_t atime): ftime(atime) {}
1.1       parser     69: 
1.19      paf        70:        time_t get_time() const { return ftime; }
1.1       parser     71:        void set_time(time_t atime) { ftime=atime; }
                     72: 
                     73: private:
                     74: 
                     75:        time_t ftime;
                     76: 
                     77: };
                     78: 
                     79: #endif

E-mail: