summaryrefslogtreecommitdiff
path: root/times.h
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2007-04-19 14:47:33 +0000
committerJohn Wiegley <johnw@newartisans.com>2008-04-13 03:38:27 -0400
commitc5214c87594e0de68111a9160dba5dc1aceb9a43 (patch)
tree41419220704bb48e79d506cee4d12cb3e35fdc69 /times.h
parent53c132ad98caf765eaba51fe4c5a85e4a69ddf06 (diff)
downloadfork-ledger-c5214c87594e0de68111a9160dba5dc1aceb9a43.tar.gz
fork-ledger-c5214c87594e0de68111a9160dba5dc1aceb9a43.tar.bz2
fork-ledger-c5214c87594e0de68111a9160dba5dc1aceb9a43.zip
Changed date parser to use lex/yacc.
Diffstat (limited to 'times.h')
-rw-r--r--times.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/times.h b/times.h
index da468a98..b0d9d22b 100644
--- a/times.h
+++ b/times.h
@@ -8,6 +8,9 @@
#include <ctime>
#include <string>
+#include <iostream>
+
+#include "error.h"
namespace ledger {
@@ -15,6 +18,12 @@ typedef boost::posix_time::ptime ptime;
typedef boost::posix_time::seconds seconds;
typedef ptime::time_duration_type time_duration;
+class datetime_error : public error {
+ public:
+ datetime_error(const std::string& _reason) throw() : error(_reason) {}
+ virtual ~datetime_error() throw() {}
+};
+
class interval_t
{
public:
@@ -31,6 +40,7 @@ public:
void parse(std::istream& in) {}
};
+#if 0
inline ptime ptime_local_to_utc(const ptime& when) {
struct std::tm tm_gmt = to_tm(when);
return boost::posix_time::from_time_t(std::mktime(&tm_gmt));
@@ -46,9 +56,63 @@ inline ptime ptime_from_local_date_string(const std::string& date_string) {
inline ptime ptime_from_local_time_string(const std::string& time_string) {
return ptime_local_to_utc(boost::posix_time::time_from_string(time_string));
}
+#endif
+
+ptime parse_datetime(std::istream& in);
+
+inline ptime parse_datetime(const std::string& str) {
+ std::istringstream instr(str);
+ return parse_datetime(instr);
+}
extern ptime now;
+extern bool day_before_month;
+
+struct intorchar
+{
+ int ival;
+ char * sval;
+
+ intorchar() : ival(-1), sval(NULL) {}
+ intorchar(int val) : ival(val), sval(NULL) {}
+ intorchar(char * val) : ival(-1), sval(NULL) {
+ set_sval(val);
+ }
+ intorchar(const intorchar& o) : ival(o.ival), sval(NULL) {
+ set_sval(o.sval);
+ }
+
+ ~intorchar() {
+ clear_sval();
+ }
+
+ intorchar& operator=(const intorchar& o) {
+ if (&o == this)
+ return *this;
+
+ ival = o.ival;
+ set_sval(o.sval);
+ }
+
+private:
+ void clear_sval() {
+ if (sval) {
+ delete[] sval;
+ sval = NULL;
+ }
+ }
+
+ void set_sval(char * val) {
+ clear_sval();
+ if (val) {
+ sval = new char[std::strlen(val) + 1];
+ std::strcpy(sval, val);
+ }
+ }
+};
}
+boost::posix_time::ptime parse_abs_datetime(std::istream& input);
+
#endif /* _TIMES_H */