Started breaking up interval_t into range_t

This commit is contained in:
John Wiegley 2009-03-11 04:38:02 -04:00
parent 63080a7275
commit 0de43f483b

View file

@ -123,6 +123,42 @@ inline std::string format_date(const date_t& when,
return buf; return buf;
} }
/**
* @brief Brief
*
* Long.
*/
struct range_t
{
date_t begin;
date_t end;
date_range_t(const date_t& _begin = date_t(),
const date_t& _end = date_t())
: begin(_begin), end(_end) {
TRACE_CTOR(date_range_t, "const date_t&, const date_t&");
}
date_range_t(const date_range_t& other)
: begin(other.begin), end(other.end) {
TRACE_CTOR(date_range_t, "copy");
}
date_range_t(const string& desc) : begin(), end() {
TRACE_CTOR(date_range_t, "const string&");
std::istringstream stream(desc);
parse(stream);
}
~date_range_t() throw() {
TRACE_DTOR(date_range_t);
}
bool date_in_range(const date_t& date) {
return ((! is_valid(begin) || date >= begin) &&
(! is_valid(end) || date < end));
}
void parse(std::istream& in);
};
/** /**
* @brief Brief * @brief Brief
* *
@ -134,36 +170,27 @@ struct interval_t
int months; int months;
int days; int days;
bool weekly; bool weekly;
date_t begin;
date_t end;
interval_t(int _days = 0, interval_t(int _days = 0,
int _months = 0, int _months = 0,
int _years = 0, int _years = 0,
bool _weekly = false, bool _weekly = false)
const date_t& _begin = date_t(), : years(_years), months(_months), days(_days), weekly(_weekly) {
const date_t& _end = date_t()) TRACE_CTOR(interval_t, "int, int, int, bool");
: years(_years), months(_months), days(_days),
weekly(_weekly), begin(_begin), end(_end) {
TRACE_CTOR(interval_t,
"int, int, int, bool, const date_t&, const date_t&");
} }
interval_t(const interval_t& other) interval_t(const interval_t& other)
: years(other.years), : years(other.years),
months(other.months), months(other.months),
days(other.days), days(other.days),
weekly(other.weekly), weekly(other.weekly) {
begin(other.begin),
end(other.end) {
TRACE_CTOR(interval_t, "copy"); TRACE_CTOR(interval_t, "copy");
} }
interval_t(const string& desc) interval_t(const string& desc)
: years(0), months(0), days(0), weekly(false), begin(), end() { : years(0), months(0), days(0), weekly(false) {
TRACE_CTOR(interval_t, "const string&"); TRACE_CTOR(interval_t, "const string&");
std::istringstream stream(desc); std::istringstream stream(desc);
parse(stream); parse(stream);
} }
~interval_t() throw() { ~interval_t() throw() {
TRACE_DTOR(interval_t); TRACE_DTOR(interval_t);
} }
@ -172,9 +199,11 @@ struct interval_t
return years != 0 || months != 0 || days != 0; return years != 0 || months != 0 || days != 0;
} }
#if 0
void set_start(const date_t& moment) { void set_start(const date_t& moment) {
begin = first(moment); begin = first(moment);
} }
#endif
date_t first(const optional<date_t>& moment = none); date_t first(const optional<date_t>& moment = none);
date_t increment(const date_t&) const; date_t increment(const date_t&) const;