1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| |
#include "database-private.h"
#include "parse-time-vrp.h"
#include "parse-time-string.h"
#define PREFIX "date:"
/* See *ValueRangeProcessor in xapian-core/api/valuerangeproc.cc */
Xapian::valueno
ParseTimeValueRangeProcessor::operator() (std::string &begin, std::string &end)
{
time_t t, now;
/* Require date: prefix in start of the range... */
if (STRNCMP_LITERAL (begin.c_str (), PREFIX))
return Xapian::BAD_VALUENO;
/* ...and remove it. */
begin.erase (0, sizeof (PREFIX) - 1);
/* Use the same 'now' for begin and end. */
if (time (&now) == (time_t) -1)
return Xapian::BAD_VALUENO;
if (!begin.empty ()) {
if (parse_time_string (begin.c_str (), &t, &now, PARSE_TIME_ROUND_DOWN))
return Xapian::BAD_VALUENO;
begin.assign (Xapian::sortable_serialise ((double) t));
}
if (!end.empty ()) {
if (parse_time_string (end.c_str (), &t, &now, PARSE_TIME_ROUND_UP))
return Xapian::BAD_VALUENO;
end.assign (Xapian::sortable_serialise ((double) t));
}
return valno;
}
|