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

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

E-mail: