2016-07-10 12:54:39 +00:00
|
|
|
//
|
|
|
|
// Storage.hpp
|
|
|
|
// Clock Signal
|
|
|
|
//
|
|
|
|
// Created by Thomas Harte on 10/07/2016.
|
|
|
|
// Copyright © 2016 Thomas Harte. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef Storage_hpp
|
|
|
|
#define Storage_hpp
|
|
|
|
|
2016-07-29 11:31:02 +00:00
|
|
|
#include "../NumberTheory/Factors.hpp"
|
|
|
|
|
2016-07-10 12:54:39 +00:00
|
|
|
namespace Storage {
|
|
|
|
|
2016-08-01 10:04:55 +00:00
|
|
|
/*!
|
|
|
|
Contains either an absolute time or a time interval, described as a quotient, in terms of a
|
|
|
|
clock rate to which the time is relative and its length in cycles based on that clock rate.
|
|
|
|
*/
|
2016-07-10 12:54:39 +00:00
|
|
|
struct Time {
|
|
|
|
unsigned int length, clock_rate;
|
2016-07-29 11:31:02 +00:00
|
|
|
|
2016-08-01 10:04:55 +00:00
|
|
|
/*!
|
|
|
|
Reduces this @c Time to its simplest form — eliminates all common factors from @c length
|
|
|
|
and @c clock_rate.
|
|
|
|
*/
|
2016-07-29 11:31:02 +00:00
|
|
|
inline void simplify()
|
|
|
|
{
|
|
|
|
unsigned int common_divisor = NumberTheory::greatest_common_divisor(length, clock_rate);
|
|
|
|
length /= common_divisor;
|
|
|
|
clock_rate /= common_divisor;
|
|
|
|
}
|
2016-07-31 17:32:30 +00:00
|
|
|
|
2016-08-01 10:04:55 +00:00
|
|
|
/*!
|
|
|
|
Returns the floating point conversion of this @c Time. This will often be less precise.
|
|
|
|
*/
|
2016-07-31 17:32:30 +00:00
|
|
|
inline float get_float()
|
|
|
|
{
|
|
|
|
return (float)length / (float)clock_rate;
|
|
|
|
}
|
2016-07-10 12:54:39 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* Storage_h */
|