Annotation of parser3/src/types/pa_vdate.h, revision 1.9
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:
1.9 ! paf 7: $Id: pa_vdate.h,v 1.8 2002/02/08 08:30:19 paf 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:
1.9 ! paf 18: // defines
! 19:
! 20: #define VDATE_TYPE "date"
! 21:
! 22: // externs
! 23:
1.1 parser 24: extern Methoded *date_class;
25:
26: /// value of type 'date'. implemented with @c time_t
27: class VDate : public VStateless_object {
28: public: // Value
29:
1.9 ! paf 30: const char *type() const { return VDATE_TYPE; }
1.1 parser 31: /// VDate: ftime -> float days
32: Value *as_expr_result(bool return_string_as_is=false) {
33: return NEW VDouble(pool(), as_double());
34: }
35:
36: /// VDate: ftime -> float days
1.4 parser 37: double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1 parser 38: /// VDate: 0 or !0
1.4 parser 39: bool as_bool() const { return ftime!=0; }
1.1 parser 40:
41:
1.3 parser 42: /// VDate: CLASS,method,field
1.1 parser 43: Value *get_element(const String& aname) {
1.3 parser 44: // $CLASS,$method
1.1 parser 45: if(Value *result=VStateless_object::get_element(aname))
46: return result;
47:
48: // $year month day hour minute second weekday
49: tm *tmOut=localtime(&ftime);
50: int result;
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 return 0;
59: return NEW VInt(pool(), result);
60: }
61:
62: protected: // VAliased
63:
64: /// disable .CLASS element. @see VAliased::get_element
65: bool hide_class() { return true; }
66:
67: public: // usage
68:
69: VDate(Pool& apool, time_t adate) : VStateless_object(apool, *date_class),
70: ftime(adate) {
71: }
72:
73: time_t get_time() { return ftime; }
74: void set_time(time_t atime) { ftime=atime; }
75:
76: private:
77:
78: time_t ftime;
79:
80: };
81:
82: #endif
E-mail: