ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/FeepingCreaturism/FeepingCreaturism.cpp
(Generate patch)

Comparing FeepingCreaturism/FeepingCreaturism.cpp (file contents):
Revision 210 by Douglas Thrift, 2004-09-01T03:36:00-07:00 vs.
Revision 211 by Douglas Thrift, 2004-09-04T20:44:52-07:00

# Line 32 | Line 32 | FeepingCreaturism::FeepingCreaturism()
32          ext::String path(env.get("PATH_INFO"));
33          Matcher matcher;
34  
35 <        if (path == "/daily/") daily(); else if (path == "/random/")
35 >        if (path == matcher("^/daily/(\\d{4}-\\d{2}-\\d{2})?$"))
36          {
37 <                random();
37 >                daily(matcher.size() > 1 ? matcher[1] : "");
38 >        }
39 >        else if (path == matcher("^/random/(\\d+)?$"))
40 >        {
41 >                random(matcher.size() > 1 ? matcher[1] : "");
42          }
43          else if (path == matcher("^/(" + this->matcher + ")$"))
44          {
# Line 127 | Line 131 | void FeepingCreaturism::parse()
131          while (query.good());
132   }
133  
134 < void FeepingCreaturism::daily()
134 > void FeepingCreaturism::daily(const ext::String& date)
135   {
136          std::time_t when(std::time(NULL));
137 <        std::tm* now(std::localtime(&when));
137 >        std::tm* day(std::localtime(&when));
138 >
139 >        day->tm_sec = 0;
140 >        day->tm_min = 0;
141 >        day->tm_hour = 0;
142  
143 <        now->tm_sec = 0;
136 <        now->tm_min = 0;
137 <        now->tm_hour = 0;
143 >        if (!date.IsEmpty()) ::strptime(date.NullTerminate(), "%Y-%m-%d", day);
144  
145 <        std::time_t difference(mktime(now) / 86400);
145 >        std::time_t difference(mktime(day) / 86400);
146          std::vector<ext::String> jargon(this->jargon.begin(), this->jargon.end());
147          ext::String entry(jargon.size() ? jargon[difference % jargon.size()] : "");
148  
149          select(entry);
150   }
151  
152 < void FeepingCreaturism::random()
152 > void FeepingCreaturism::random(const ext::String& number)
153   {
154          ::srandomdev();
155  
156          std::vector<ext::String> jargon(this->jargon.begin(), this->jargon.end());
157 <        ext::String entry(jargon.size() ? jargon[::random() % jargon.size()] : "");
157 >        std::vector<ext::String>::size_type random(number.IsEmpty() ? ::random() :
158 >                lexical_cast<std::vector<ext::String>::size_type>(number));
159 >
160 >        assert(random >= 0);
161 >        assert(random % jargon.size() < jargon.size());
162 >
163 >        ext::String entry(jargon.size() ? jargon[random % jargon.size()] : "");
164  
165          select(entry);
166   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines