@@ -103,11 +103,10 @@ namespace Rcpp{
103103 class Timer {
104104 public:
105105 Timer () : data(), start_time( get_nanotime() ){}
106+ Timer (nanotime_t start_time_) : data(), start_time(start_time_){}
106107
107108 void step ( const std::string& name){
108- nanotime_t now = get_nanotime ();
109- data.push_back (std::make_pair (name, now - start_time));
110- start_time = get_nanotime ();
109+ data.push_back (std::make_pair (name, now ()));
111110 }
112111
113112 operator SEXP () const {
@@ -116,7 +115,7 @@ namespace Rcpp{
116115 CharacterVector names (n);
117116 for (size_t i=0 ; i<n; i++) {
118117 names[i] = data[i].first ;
119- out[i] = data[i].second ;
118+ out[i] = data[i].second - start_time ;
120119 }
121120 out.attr (" names" ) = names;
122121 return out;
@@ -125,13 +124,21 @@ namespace Rcpp{
125124 static std::vector<Timer> get_timers (int n){
126125 return std::vector<Timer>( n, Timer () ) ;
127126 }
127+
128+ inline nanotime_t now () const {
129+ return get_nanotime () ;
130+ }
131+
132+ inline nanotime_t origin () const {
133+ return start_time ;
134+ }
128135
129136 private:
130137 typedef std::pair<std::string,nanotime_t > Step;
131138 typedef std::vector<Step> Steps;
132139
133140 Steps data;
134- nanotime_t start_time;
141+ const nanotime_t start_time;
135142 };
136143
137144}
0 commit comments