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

1.1       parser      1: /** @file
                      2:        Parser: @b date parser class decl.
                      3: 
                      4:        Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
                      5:        Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
                      6: 
1.5     ! parser      7:        $Id: pa_vdate.h,v 1.4 2001/09/24 14:34:25 parser 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: 
                     18: extern Methoded *date_class;
                     19: 
                     20: /// value of type 'date'. implemented with @c time_t
                     21: class VDate : public VStateless_object {
                     22: public: // Value
                     23: 
                     24:        const char *type() const { return "date"; }
                     25:        /// VDate: ftime -> float days
                     26:        Value *as_expr_result(bool return_string_as_is=false) {
                     27:                return NEW VDouble(pool(), as_double());
                     28:        }
                     29: 
                     30:        /// VDate: ftime -> float days
1.4       parser     31:        double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1       parser     32:        /// VDate: 0 or !0
1.4       parser     33:        bool as_bool() const { return ftime!=0; }
1.1       parser     34: 
                     35: 
1.3       parser     36:        /// VDate: CLASS,method,field
1.1       parser     37:        Value *get_element(const String& aname) {
1.3       parser     38:                // $CLASS,$method
1.1       parser     39:                if(Value *result=VStateless_object::get_element(aname))
                     40:                        return result;
                     41: 
                     42:                // $year month day  hour minute second  weekday
                     43:                tm *tmOut=localtime(&ftime);
                     44:                int result;
                     45:                if(aname=="year") result=1900+tmOut->tm_year;
                     46:                else if(aname=="month") result=1+tmOut->tm_mon;
                     47:                else if(aname=="day") result=tmOut->tm_mday;
                     48:                else if(aname=="hour") result=tmOut->tm_hour;
                     49:                else if(aname=="minute") result=tmOut->tm_min;
                     50:                else if(aname=="second") result=tmOut->tm_sec;
                     51:                else if(aname=="weekday") result=tmOut->tm_wday;
                     52:                else return 0;
                     53:                return NEW VInt(pool(), result);
                     54:        }
                     55: 
                     56: protected: // VAliased
                     57: 
                     58:        /// disable .CLASS element. @see VAliased::get_element
                     59:        bool hide_class() { return true; }
                     60: 
                     61: public: // usage
                     62: 
                     63:        VDate(Pool& apool, time_t adate) : VStateless_object(apool, *date_class), 
                     64:                ftime(adate) {
                     65:        }
                     66: 
                     67:        time_t get_time() { return ftime; }
                     68:        void set_time(time_t atime) { ftime=atime; }
                     69: 
                     70: private:
                     71: 
                     72:        time_t ftime;
                     73: 
                     74: };
                     75: 
                     76: #endif

E-mail: