Skip to content
Browse files

Get rid of struct Time

We just need the milliseconds of current system
time for our needs. This allows to simplify the
API.

No functional change.
  • Loading branch information...
1 parent 5900ab7 commit b50ce5ebfbc9f8b043f0d915c47b0ac550d4affc @mcostalba committed Sep 4, 2012
Showing with 28 additions and 26 deletions.
  1. +2 −2 src/benchmark.cpp
  2. +1 −1 src/book.cpp
  3. +8 −1 src/misc.cpp
  4. +4 −9 src/misc.h
  5. +12 −12 src/search.cpp
  6. +1 −1 src/search.h
View
4 src/benchmark.cpp
@@ -111,7 +111,7 @@ void benchmark(const Position& current, istream& is) {
int64_t nodes = 0;
Search::StateStackPtr st;
- Time time = Time::now();
+ Time::point t = Time::now();
for (size_t i = 0; i < fens.size(); i++)
{
@@ -133,7 +133,7 @@ void benchmark(const Position& current, istream& is) {
}
}
- int e = time.elapsed() + 1; // Assure positive to avoid a 'divide by zero'
+ int e = Time::now() - t + 1; // Assure positive to avoid a 'divide by zero'
cerr << "\n==========================="
<< "\nTotal time (ms) : " << e
View
2 src/book.cpp
@@ -340,7 +340,7 @@ namespace {
Book::Book() {
- for (int i = Time::now().msec() % 10000; i > 0; i--)
+ for (int i = Time::now() % 10000; i > 0; i--)
RKiss.rand<unsigned>(); // Make random number generation less deterministic
}
View
9 src/misc.cpp
@@ -68,6 +68,13 @@ const string engine_info(bool to_uci) {
}
+/// Convert system time to milliseconds. That's all we need.
+
+Time::point Time::now() {
+ sys_time_t t; system_time(&t); return time_to_msec(t);
+}
+
+
/// Debug functions used mainly to collect run-time statistics
static uint64_t hits[2], means[2];
@@ -201,7 +208,7 @@ void timed_wait(WaitCondition& sleepCond, Lock& sleepLock, int msec) {
int tm = msec;
#else
timespec ts, *tm = &ts;
- uint64_t ms = Time::now().msec() + msec;
+ uint64_t ms = Time::now() + msec;
ts.tv_sec = ms / 1000;
ts.tv_nsec = (ms % 1000) * 1000000LL;
View
13 src/misc.h
@@ -44,15 +44,10 @@ struct Log : public std::ofstream {
};
-struct Time {
- int64_t msec() const { return time_to_msec(t); }
- int elapsed() const { return int(now().msec() - msec()); }
-
- static Time now() { Time t; system_time(&t.t); return t; }
-
-private:
- sys_time_t t;
-};
+namespace Time {
+ typedef int64_t point;
+ point now();
+}
template<class Entry, int Size>
View
24 src/search.cpp
@@ -42,7 +42,7 @@ namespace Search {
LimitsType Limits;
std::vector<RootMove> RootMoves;
Position RootPosition;
- Time SearchTime;
+ Time::point SearchTime;
StateStackPtr SetupStates;
}
@@ -290,7 +290,7 @@ void Search::think() {
if (Options["Use Search Log"])
{
- int e = SearchTime.elapsed();
+ int e = Time::now() - SearchTime;
Log log(Options["Search Log Filename"]);
log << "Nodes: " << pos.nodes_searched()
@@ -398,7 +398,7 @@ namespace {
// Send full PV info to GUI if we are going to leave the loop or
// if we have a fail high/low and we are deep in the search.
- if ((bestValue > alpha && bestValue < beta) || SearchTime.elapsed() > 2000)
+ if ((bestValue > alpha && bestValue < beta) || Time::now() - SearchTime > 2000)
sync_cout << uci_pv(pos, depth, alpha, beta) << sync_endl;
// In case of failing high/low increase aspiration window and
@@ -431,7 +431,7 @@ namespace {
if (!Signals.stop && Options["Use Search Log"])
{
Log log(Options["Search Log Filename"]);
- log << pretty_pv(pos, depth, bestValue, SearchTime.elapsed(), &RootMoves[0].pv[0])
+ log << pretty_pv(pos, depth, bestValue, Time::now() - SearchTime, &RootMoves[0].pv[0])
<< std::endl;
}
@@ -451,14 +451,14 @@ namespace {
// Stop search if most of available time is already consumed. We
// probably don't have enough time to search the first move at the
// next iteration anyway.
- if (SearchTime.elapsed() > (TimeMgr.available_time() * 62) / 100)
+ if (Time::now() - SearchTime > (TimeMgr.available_time() * 62) / 100)
stop = true;
// Stop search early if one move seems to be much better than others
if ( depth >= 12
&& !stop
&& ( (bestMoveNeverChanged && pos.captured_piece_type())
- || SearchTime.elapsed() > (TimeMgr.available_time() * 40) / 100))
+ || Time::now() - SearchTime > (TimeMgr.available_time() * 40) / 100))
{
Value rBeta = bestValue - EasyMoveMargin;
(ss+1)->excludedMove = RootMoves[0].pv[0];
@@ -827,7 +827,7 @@ namespace {
{
Signals.firstRootMove = (moveCount == 1);
- if (thisThread == Threads.main_thread() && SearchTime.elapsed() > 2000)
+ if (thisThread == Threads.main_thread() && Time::now() - SearchTime > 2000)
sync_cout << "info depth " << depth / ONE_PLY
<< " currmove " << move_to_uci(move, Chess960)
<< " currmovenumber " << moveCount + PVIdx << sync_endl;
@@ -1494,7 +1494,7 @@ namespace {
static RKISS rk;
// PRNG sequence should be not deterministic
- for (int i = Time::now().msec() % 50; i > 0; i--)
+ for (int i = Time::now() % 50; i > 0; i--)
rk.rand<unsigned>();
// RootMoves are already sorted by score in descending order
@@ -1536,7 +1536,7 @@ namespace {
string uci_pv(const Position& pos, int depth, Value alpha, Value beta) {
std::stringstream s;
- int t = SearchTime.elapsed();
+ int t = Time::now() - SearchTime;
int selDepth = 0;
for (size_t i = 0; i < Threads.size(); i++)
@@ -1749,9 +1749,9 @@ void Thread::idle_loop() {
void check_time() {
- static Time lastInfoTime = Time::now();
+ static Time::point lastInfoTime = Time::now();
- if (lastInfoTime.elapsed() >= 1000)
+ if (Time::now() - lastInfoTime >= 1000)
{
lastInfoTime = Time::now();
dbg_print();
@@ -1760,7 +1760,7 @@ void check_time() {
if (Limits.ponder)
return;
- int e = SearchTime.elapsed();
+ int e = Time::now() - SearchTime;
bool stillAtFirstMove = Signals.firstRootMove
&& !Signals.failedLowAtRoot
&& e > TimeMgr.available_time();
View
2 src/search.h
@@ -99,7 +99,7 @@ extern volatile SignalsType Signals;
extern LimitsType Limits;
extern std::vector<RootMove> RootMoves;
extern Position RootPosition;
-extern Time SearchTime;
+extern Time::point SearchTime;
extern StateStackPtr SetupStates;
extern void init();

0 comments on commit b50ce5e

Please sign in to comment.
Something went wrong with that request. Please try again.