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: