+
+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;
+};
+
+
+template<class Entry, int Size>
+struct HashTable {
+ HashTable() : e(Size, Entry()) {}
+ Entry* operator[](Key k) { return &e[(uint32_t)k & (Size - 1)]; }
+
+private:
+ std::vector<Entry> e;
+};
+
+
+enum SyncCout { io_lock, io_unlock };
+std::ostream& operator<<(std::ostream&, SyncCout);
+
+#define sync_cout std::cout << io_lock
+#define sync_endl std::endl << io_unlock
+