Annotation of parser3/src/types/pa_vdate.h, revision 1.12
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: */
7:
8: #ifndef PA_VDATE_H
9: #define PA_VDATE_H
1.11 paf 10:
1.12 ! paf 11: static const char* IDENT_VDATE_H="$Date: pa_vdate.h,v 1.11 2002/08/01 11:26:54 paf Exp $";
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"
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.10 paf 31: VStateless_class *get_class() { return date_class; }
32:
1.1 parser 33: /// VDate: ftime -> float days
34: Value *as_expr_result(bool return_string_as_is=false) {
35: return NEW VDouble(pool(), as_double());
36: }
37:
38: /// VDate: ftime -> float days
1.4 parser 39: double as_double() const { return ((double)ftime)/ SECS_PER_DAY; }
1.1 parser 40: /// VDate: 0 or !0
1.4 parser 41: bool as_bool() const { return ftime!=0; }
1.1 parser 42:
43:
1.3 parser 44: /// VDate: CLASS,method,field
1.1 parser 45: Value *get_element(const String& aname) {
1.3 parser 46: // $CLASS,$method
1.1 parser 47: if(Value *result=VStateless_object::get_element(aname))
48: return result;
49:
50: // $year month day hour minute second weekday
51: tm *tmOut=localtime(&ftime);
52: int result;
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 return 0;
61: return NEW VInt(pool(), result);
62: }
63:
64: protected: // VAliased
65:
66: /// disable .CLASS element. @see VAliased::get_element
67: bool hide_class() { return true; }
68:
69: public: // usage
70:
1.10 paf 71: VDate(Pool& apool, time_t adate) : VStateless_object(apool),
1.1 parser 72: ftime(adate) {
73: }
74:
75: time_t get_time() { return ftime; }
76: void set_time(time_t atime) { ftime=atime; }
77:
78: private:
79:
80: time_t ftime;
81:
82: };
83:
84: #endif
E-mail: