/*
{{copyright}}
*/

/*
{{version}}
*/

/*
{{license}}
*/

#pragma once

#include "iTimer.h"

namespace sdi_toolBox::dateTime
{
//--------------------------------------------------------------
/**
 * @brief Standard timer implementation using std::chrono.
 *
 * Implements ITimer using std::chrono::high_resolution_clock for
 * high-precision timing in standard C++ environments.
 */
class Timer : public ITimer
{
  public:
  Timer();                                              // Default constructor
  ~Timer()                               = default;     // Default destructor
  Timer(const Timer &obj)                = default;     // Copy constructor
  Timer(Timer &&obj) noexcept            = default;     // Move constructor
  Timer &operator=(const Timer &obj)     = default;     // Copy assignment operator
  Timer &operator=(Timer &&obj) noexcept = default;     // Move assignment operator

  /**
   * @brief Returns the current time point using std::chrono::high_resolution_clock.
   * @return The current time point.
   */
  [[nodiscard]] TimePoint now() const override;
};
//--------------------------------------------------------------
/* Default constructor */
inline Timer::Timer()
{
  reset();
}
//--------------------------------------------------------------
/* Get the current timepoint */
inline Timer::TimePoint Timer::now() const
{
  return Clock::now();
}
//--------------------------------------------------------------
}     // namespace sdi_toolBox::dateTime
