Annotation of parser3/src/types/pa_vdate.h, revision 1.24.2.5
1.1 parser 1: /** @file
2: Parser: @b date parser class decl.
3:
1.24.2.3 paf 4: Copyright (c) 2001-2003 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.24.2.5! paf 11: static const char* IDENT_VDATE_H="$Date: 2003/02/04 11:29:09 $";
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:
1.9 paf 22: // externs
23:
1.24.2.1 paf 24: extern MethodedPtr date_class;
1.1 parser 25:
26: /// value of type 'date'. implemented with @c time_t
1.24.2.5! paf 27: class VDate: public VStateless_object {
1.1 parser 28: public: // Value
29:
1.24.2.3 paf 30: override const char* type() const { return VDATE_TYPE; }
1.24.2.1 paf 31: override VStateless_class *get_class() { return date_class.get(); }
1.10 paf 32:
1.1 parser 33: /// VDate: ftime -> float days
1.24.2.1 paf 34: override ValuePtr as_expr_result(bool return_string_as_is=false) {
35: return ValuePtr(new VDouble(as_double()));
1.1 parser 36: }
37:
38: /// VDate: ftime -> float days
1.24.2.1 paf 39: override double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1 parser 40: /// VDate: 0 or !0
1.24.2.1 paf 41: override bool as_bool() const { return ftime!=0; }
1.1 parser 42:
43:
1.15 paf 44: /// VDate: method,field
1.24.2.2 paf 45: override ValuePtr get_element(StringPtr aname, Value& aself, bool looking_up) {
1.15 paf 46: // $method
1.24.2.1 paf 47: if(ValuePtr result=VStateless_object::get_element(aname, aself, looking_up))
1.1 parser 48: return result;
49:
50: // $year month day hour minute second weekday
51: tm *tmOut=localtime(&ftime);
52: int result;
1.24.2.1 paf 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;
60: else if(*aname=="yearday") result=tmOut->tm_yday;
61: else if(*aname=="daylightsaving") result=tmOut->tm_isdst;
1.24.2.4 paf 62: else { bark("%s field not found", 0, aname); return ValuePtr(0); }
1.24.2.1 paf 63: return ValuePtr(new VInt(result));
1.1 parser 64: }
65:
66: public: // usage
67:
1.24.2.1 paf 68: VDate(time_t atime): ftime(atime) {}
1.1 parser 69:
1.19 paf 70: time_t get_time() const { return ftime; }
1.1 parser 71: void set_time(time_t atime) { ftime=atime; }
72:
73: private:
74:
75: time_t ftime;
76:
77: };
78:
79: #endif
E-mail: