#pragma once

#include <windows.h>

namespace   CELL
{
    class CELLTimestamp
    {
    public:
        CELLTimestamp()
        {
            QueryPerformanceFrequency(&_frequency);
            QueryPerformanceCounter(&_startCount);
        }
        ~CELLTimestamp()
        {}

        void    update()
        {
            QueryPerformanceCounter(&_startCount);
        }
        /**
        *   »ñÈ¡µ±Ç°Ãë
        */
        double getElapsedSecond()
        {
            return  getElapsedTimeInMicroSec() * 0.000001;
        }
        /**
        *   »ñÈ¡ºÁÃë
        */
        double getElapsedTimeInMilliSec()
        {
            return this->getElapsedTimeInMicroSec() * 0.001;
        }
        /**
        *   »ñȡ΢Ãî
        */
        double getElapsedTimeInMicroSec()
        {
            LARGE_INTEGER endCount;
            QueryPerformanceCounter(&endCount);

            double  startTimeInMicroSec =   _startCount.QuadPart * (1000000.0 / _frequency.QuadPart);
            double  endTimeInMicroSec   =   endCount.QuadPart * (1000000.0 / _frequency.QuadPart);

            return  endTimeInMicroSec - startTimeInMicroSec;
        }
    protected:
        LARGE_INTEGER   _frequency;
        LARGE_INTEGER   _startCount;
    };
}