1#ifndef TIMER_HPP 2#define TIMER_HPP 3 4// Define LIBCXXABI_NO_TIMER to disable testing with a timer. 5#ifndef LIBCXXABI_NO_TIMER 6 7#include <chrono> 8#include <iostream> 9 10class timer 11{ 12 typedef std::chrono::high_resolution_clock Clock; 13 typedef Clock::time_point TimePoint; 14 typedef std::chrono::microseconds MicroSeconds; 15public: 16 timer() : m_start(Clock::now()) {} 17 18 timer(timer const &) = delete; 19 timer & operator=(timer const &) = delete; 20 21 ~timer() 22 { 23 using std::chrono::duration_cast; 24 TimePoint end = Clock::now(); 25 MicroSeconds us = duration_cast<MicroSeconds>(end - m_start); 26 std::cout << us.count() << " microseconds\n"; 27 } 28 29private: 30 TimePoint m_start; 31}; 32 33#else /* LIBCXXABI_NO_TIMER */ 34 35class timer 36{ 37public: 38 timer() {} 39 timer(timer const &) = delete; 40 timer & operator=(timer const &) = delete; 41 ~timer() {} 42}; 43 44#endif /* LIBCXXABI_NO_TIMER */ 45 46#endif /* TIMER_HPP */