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: