Annotation of parser3/src/types/pa_vdate.h, revision 1.24.2.5.2.4
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.2.4! paf 11: static const char* IDENT_VDATE_H="$Date: 2003/03/24 09:39:56 $";
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.5.2.2 paf 24: extern Methoded* 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.5.2.2 paf 31: override VStateless_class *get_class() { return date_class; }
1.10 paf 32:
1.1 parser 33: /// VDate: ftime -> float days
1.24.2.5.2.4! paf 34: override Value& as_expr_result(bool return_string_as_is=false) { return *new VDouble(as_double()); }
1.1 parser 35:
36: /// VDate: ftime -> float days
1.24.2.1 paf 37: override double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1 parser 38: /// VDate: 0 or !0
1.24.2.1 paf 39: override bool as_bool() const { return ftime!=0; }
1.1 parser 40:
41:
1.15 paf 42: /// VDate: method,field
1.24.2.5.2.2 paf 43: override Value* get_element(const String& aname, Value& aself, bool looking_up) {
1.15 paf 44: // $method
1.24.2.5.2.2 paf 45: if(Value* result=VStateless_object::get_element(aname, aself, looking_up))
1.1 parser 46: return result;
47:
48: // $year month day hour minute second weekday
49: tm *tmOut=localtime(&ftime);
50: int result;
1.24.2.5.2.2 paf 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 if(aname=="yearday") result=tmOut->tm_yday;
59: else if(aname=="daylightsaving") result=tmOut->tm_isdst;
1.24.2.5.2.3 paf 60: else { bark("%s field not found", 0, &aname); return 0; }
61: return new VInt(result);
1.1 parser 62: }
63:
64: public: // usage
65:
1.24.2.1 paf 66: VDate(time_t atime): ftime(atime) {}
1.1 parser 67:
1.19 paf 68: time_t get_time() const { return ftime; }
1.1 parser 69: void set_time(time_t atime) { ftime=atime; }
70:
71: private:
72:
73: time_t ftime;
74:
75: };
76:
77: #endif
E-mail: