Annotation of parser3/src/types/pa_vdate.h, revision 1.4
1.1 parser 1: /** @file
2: Parser: @b date parser class decl.
3:
4: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
5:
6: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
7:
1.4 ! parser 8: $Id: pa_vdate.h,v 1.3.4.1 2001/09/20 07:47:50 parser Exp $
1.1 parser 9: */
10:
11: #ifndef PA_VDATE_H
12: #define PA_VDATE_H
13:
14: #include "classes.h"
15: #include "pa_common.h"
16: #include "pa_vstateless_object.h"
17: #include "pa_vint.h"
18:
19: extern Methoded *date_class;
20:
21: /// value of type 'date'. implemented with @c time_t
22: class VDate : public VStateless_object {
23: public: // Value
24:
25: const char *type() const { return "date"; }
26: /// VDate: ftime -> float days
27: Value *as_expr_result(bool return_string_as_is=false) {
28: return NEW VDouble(pool(), as_double());
29: }
30:
31: /// VDate: ftime -> float days
1.4 ! parser 32: double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1 parser 33: /// VDate: 0 or !0
1.4 ! parser 34: bool as_bool() const { return ftime!=0; }
1.1 parser 35:
36:
1.3 parser 37: /// VDate: CLASS,method,field
1.1 parser 38: Value *get_element(const String& aname) {
1.3 parser 39: // $CLASS,$method
1.1 parser 40: if(Value *result=VStateless_object::get_element(aname))
41: return result;
42:
43: // $year month day hour minute second weekday
44: tm *tmOut=localtime(&ftime);
45: int result;
46: if(aname=="year") result=1900+tmOut->tm_year;
47: else if(aname=="month") result=1+tmOut->tm_mon;
48: else if(aname=="day") result=tmOut->tm_mday;
49: else if(aname=="hour") result=tmOut->tm_hour;
50: else if(aname=="minute") result=tmOut->tm_min;
51: else if(aname=="second") result=tmOut->tm_sec;
52: else if(aname=="weekday") result=tmOut->tm_wday;
53: else return 0;
54: return NEW VInt(pool(), result);
55: }
56:
57: protected: // VAliased
58:
59: /// disable .CLASS element. @see VAliased::get_element
60: bool hide_class() { return true; }
61:
62: public: // usage
63:
64: VDate(Pool& apool, time_t adate) : VStateless_object(apool, *date_class),
65: ftime(adate) {
66: }
67:
68: time_t get_time() { return ftime; }
69: void set_time(time_t atime) { ftime=atime; }
70:
71: private:
72:
73: time_t ftime;
74:
75: };
76:
77: #endif
E-mail: