#ifndef INCLUDED_BOBCAT_HIGHSYSCLOCK_
#define INCLUDED_BOBCAT_HIGHSYSCLOCK_

#include <bobcat/clockbase>

namespace FBB
{

template<typename ChronoClock>
class HighSysClock;

template <typename ChronoClock>
std::ostream &operator<<(std::ostream &out,
                         HighSysClock<ChronoClock> const &clock);

template<typename ChronoClock>
class HighSysClock: public ClockBase<ChronoClock>
{
    friend std::ostream &operator<< <>(std::ostream &out,               // .f
                                    HighSysClock<ChronoClock> const &clock);

    mutable char const *d_putTime;      // put_time config
    mutable bool d_localTime;           // true: show local time

    public:
        using TimePoint = ClockBase<ChronoClock>::TimePoint;
    
        HighSysClock(TimePoint const &timePoint);
    
        std::time_t timeT() const;
    
        HighSysClock<ChronoClock> &setTimeT(std::time_t seconds);

                                                                        // .f
        HighSysClock<ChronoClock> const &operator()(
                                            char const *putTime,
                                            bool localTime = true) const;
        
    private:
        std::ostream &insert(std::ostream &out) const;                  // .f
};

#include "highsysclock.f"

} // FBB        
#endif
