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

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: 
1.9     ! paf         7:        $Id: pa_vdate.h,v 1.8 2002/02/08 08:30:19 paf Exp $
1.1       parser      8: */
                      9: 
                     10: #ifndef PA_VDATE_H
                     11: #define PA_VDATE_H
                     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"
        !            21: 
        !            22: // externs
        !            23: 
1.1       parser     24: extern Methoded *date_class;
                     25: 
                     26: /// value of type 'date'. implemented with @c time_t
                     27: class VDate : public VStateless_object {
                     28: public: // Value
                     29: 
1.9     ! paf        30:        const char *type() const { return VDATE_TYPE; }
1.1       parser     31:        /// VDate: ftime -> float days
                     32:        Value *as_expr_result(bool return_string_as_is=false) {
                     33:                return NEW VDouble(pool(), as_double());
                     34:        }
                     35: 
                     36:        /// VDate: ftime -> float days
1.4       parser     37:        double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1       parser     38:        /// VDate: 0 or !0
1.4       parser     39:        bool as_bool() const { return ftime!=0; }
1.1       parser     40: 
                     41: 
1.3       parser     42:        /// VDate: CLASS,method,field
1.1       parser     43:        Value *get_element(const String& aname) {
1.3       parser     44:                // $CLASS,$method
1.1       parser     45:                if(Value *result=VStateless_object::get_element(aname))
                     46:                        return result;
                     47: 
                     48:                // $year month day  hour minute second  weekday
                     49:                tm *tmOut=localtime(&ftime);
                     50:                int result;
                     51:                if(aname=="year") result=1900+tmOut->tm_year;
                     52:                else if(aname=="month") result=1+tmOut->tm_mon;
                     53:                else if(aname=="day") result=tmOut->tm_mday;
                     54:                else if(aname=="hour") result=tmOut->tm_hour;
                     55:                else if(aname=="minute") result=tmOut->tm_min;
                     56:                else if(aname=="second") result=tmOut->tm_sec;
                     57:                else if(aname=="weekday") result=tmOut->tm_wday;
                     58:                else return 0;
                     59:                return NEW VInt(pool(), result);
                     60:        }
                     61: 
                     62: protected: // VAliased
                     63: 
                     64:        /// disable .CLASS element. @see VAliased::get_element
                     65:        bool hide_class() { return true; }
                     66: 
                     67: public: // usage
                     68: 
                     69:        VDate(Pool& apool, time_t adate) : VStateless_object(apool, *date_class), 
                     70:                ftime(adate) {
                     71:        }
                     72: 
                     73:        time_t get_time() { return ftime; }
                     74:        void set_time(time_t atime) { ftime=atime; }
                     75: 
                     76: private:
                     77: 
                     78:        time_t ftime;
                     79: 
                     80: };
                     81: 
                     82: #endif

E-mail: