Annotation of parser3/src/types/pa_vdate.h, revision 1.13
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.13 ! paf 11: static const char* IDENT_VDATE_H="$Date: 2002/08/01 11:41:22 $";
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"
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.10 paf 31: VStateless_class *get_class() { return date_class; }
32:
1.1 parser 33: /// VDate: ftime -> float days
34: Value *as_expr_result(bool return_string_as_is=false) {
35: return NEW VDouble(pool(), as_double());
36: }
37:
38: /// VDate: ftime -> float days
1.4 parser 39: double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1 parser 40: /// VDate: 0 or !0
1.4 parser 41: bool as_bool() const { return ftime!=0; }
1.1 parser 42:
43:
1.3 parser 44: /// VDate: CLASS,method,field
1.1 parser 45: Value *get_element(const String& aname) {
1.3 parser 46: // $CLASS,$method
1.1 parser 47: if(Value *result=VStateless_object::get_element(aname))
48: return result;
49:
50: // $year month day hour minute second weekday
51: tm *tmOut=localtime(&ftime);
52: int result;
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;
1.13 ! paf 60: else if(aname=="yearday") result=tmOut->tm_yday;
! 61: else if(aname=="daylightsaving") result=tmOut->tm_isdst;
1.1 parser 62: else return 0;
63: return NEW VInt(pool(), result);
64: }
65:
66: protected: // VAliased
67:
68: /// disable .CLASS element. @see VAliased::get_element
69: bool hide_class() { return true; }
70:
71: public: // usage
72:
1.10 paf 73: VDate(Pool& apool, time_t adate) : VStateless_object(apool),
1.1 parser 74: ftime(adate) {
75: }
76:
77: time_t get_time() { return ftime; }
78: void set_time(time_t atime) { ftime=atime; }
79:
80: private:
81:
82: time_t ftime;
83:
84: };
85:
86: #endif
E-mail: