Program Listing for File time.cpp

Return to documentation for file (lib/utilities/time.cpp)

// ---------------------------------------------------------------------
// This file is part of falcon-core.
//
// Copyright (C) 2015, 2016, 2017 Neuro-Electronics Research Flanders
//
// Falcon-server is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Falcon-server is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with falcon-core. If not, see <http://www.gnu.org/licenses/>.
// ---------------------------------------------------------------------

#include "time.hpp"

#include <iomanip>
#include <sstream>
#include <thread>
#include <limits>


void custom_sleep_for(uint64_t microseconds) {
  if (microseconds > 1000) {
    std::this_thread::sleep_for(std::chrono::microseconds(microseconds));
  } else {
    auto t = Clock::now() + std::chrono::microseconds(microseconds);
    while (Clock::now() < t) {
    }
  }
}

std::string time_to_string(std::time_t t, std::string fmt) {
  std::stringstream s;
  s << std::put_time(std::localtime(&t), fmt.c_str());
  return s.str();
}

double compute_delta_ts(uint64_t t1, uint64_t t2) {
  int sign = 1;
  uint64_t diff;

  if (t1 > t2) {
    diff = t1 - t2;
  } else {
    diff = t2 - t1;
    sign = -1;
  }

  return sign * static_cast<double>(diff) * 1e-6;
}

void TimestampRegister::reset() {
  hw = std::numeric_limits<uint64_t>::min();
  source = TimePoint::min();
}