#pragma once
#include <cstddef>
//#include "PhysicsEnum.h"
enum class CalculationID : std:: size_t {
None,//maybe...
Float8,//maybe...
Float16,//maybe...
Float32,//maybe...
Float64,//maybe...
Float80,//maybe...
Meter,
Speed,
Gram,
Newton,
Metric,
GravityConstant,
Velocity,
Second,
Ampere,
Kelvin,
Mol,
Candela
} ;
template < class T, CalculationID PID>
class CalculationType {
public :
typedef CalculationID ID;
CalculationType( const T& In) : Value_( In) { }
const T& Get( ) {
return Value_;
}
const T& operator = ( const T& In) {
Value_ = In;
return Value_;
}
operator const T& ( ) {
return Value_;
}
protected :
T Value_ = T( 0 ) ;
} ;
template < class T> using Meter = CalculationType< T, CalculationID:: Meter > ;
template < class T> using Speed = CalculationType< T, CalculationID:: Speed > ;
template < class T> using Gram = CalculationType< T, CalculationID:: Gram > ;
template < class T> using Newton = CalculationType< T, CalculationID:: Newton > ;
template < class T> using Metric = CalculationType< T, CalculationID:: Metric > ;
template < class T> using Gravity = CalculationType< T, CalculationID:: GravityConstant > ;
template < class T> using Velocity= CalculationType< T, CalculationID:: Velocity > ;
template < class T> using Second = CalculationType< T, CalculationID:: Second > ;
template < class T> using Ampere = CalculationType< T, CalculationID:: Ampere > ;
template < class T> using Kelvin = CalculationType< T, CalculationID:: Kelvin > ;
template < class T> using Mol = CalculationType < T, CalculationID:: Mol > ;
template < class T> using Candela = CalculationType < T, CalculationID:: Candela > ;
template < class T> T StrongGravityConstant = 6.67431 ;
template < class T> T WeekGravityConstant = 6.67408 ;
template < class T> T GravityConstantMultipler = ( 1.0 / 100000000000 ) ;
template < class T> T PlanckConstant_h= { 6.62607015e-34 } ;
template < class T> T SI_a = 9.80665 ;
template < class T> T Atto = 0.000000000000000001 ;
template < class T> T Femto = 0.000000000000001 ;
template < class T> T Pico = 0.000000000001 ;
template < class T> T Nano = 0.000000001 ;
template < class T> T Micro = 0.000001 ;
template < class T> T Milli = 0.001 ;
template < class T> T Centi = 0.01 ;
template < class T> T Deci = 0.1 ;
template < class T> T Zero = 0 ;
template < class T> T One = 1 ;
template < class T> T Deca = 10.0 ;
template < class T> T Hecto = 100.0 ;
template < class T> T Kilo = 1000.0 ;
template < class T> T Mega = 1000000.0 ;
template < class T> T Giga = 1000000000.0 ;
template < class T> T Tera = 1000000000000.0 ;
template < class T> Gram< T> OneJapanYen{ 1 } ;
template < class T> Second< T> OneMetre{ 1.0 / 299792458.0 } ; //光の進む速度の1/299792458
I3ByYWdtYSBvbmNlCiNpbmNsdWRlIDxjc3RkZGVmPgovLyNpbmNsdWRlICJQaHlzaWNzRW51bS5oIgoKZW51bSBjbGFzcyBDYWxjdWxhdGlvbklEIDogc3RkOjpzaXplX3QgewoJTm9uZSwvL21heWJlLi4uCglGbG9hdDgsLy9tYXliZS4uLgoJRmxvYXQxNiwvL21heWJlLi4uCglGbG9hdDMyLC8vbWF5YmUuLi4KCUZsb2F0NjQsLy9tYXliZS4uLgoJRmxvYXQ4MCwvL21heWJlLi4uCglNZXRlciwKCVNwZWVkLAoJR3JhbSwKCU5ld3RvbiwKCU1ldHJpYywKCUdyYXZpdHlDb25zdGFudCwKCVZlbG9jaXR5LAoJU2Vjb25kLAoJQW1wZXJlLAoJS2VsdmluLAoJTW9sLAoJQ2FuZGVsYQp9OwoKCnRlbXBsYXRlPGNsYXNzIFQsIENhbGN1bGF0aW9uSUQgUElEPgpjbGFzcyBDYWxjdWxhdGlvblR5cGUgewpwdWJsaWM6Cgl0eXBlZGVmIENhbGN1bGF0aW9uSUQgSUQ7CgoJQ2FsY3VsYXRpb25UeXBlKGNvbnN0IFQmIEluKSA6VmFsdWVfKEluKSB7fQoKCWNvbnN0IFQmIEdldCgpIHsKCQlyZXR1cm4gVmFsdWVfOwoJfQoKCWNvbnN0IFQmIG9wZXJhdG9yID0oY29uc3QgVCYgSW4pIHsKCQlWYWx1ZV8gPSBJbjsKCQlyZXR1cm4gVmFsdWVfOwoJfQoKCW9wZXJhdG9yIGNvbnN0IFQmICgpIHsKCQlyZXR1cm4gVmFsdWVfOwoJfQoKcHJvdGVjdGVkOgoJVCBWYWx1ZV8gPSBUKDApOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgTWV0ZXIJPSBDYWxjdWxhdGlvblR5cGU8VCwgQ2FsY3VsYXRpb25JRDo6TWV0ZXI+Owp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBTcGVlZAk9IENhbGN1bGF0aW9uVHlwZTxULCBDYWxjdWxhdGlvbklEOjpTcGVlZD47CnRlbXBsYXRlPGNsYXNzIFQ+IHVzaW5nIEdyYW0JPSBDYWxjdWxhdGlvblR5cGU8VCwgQ2FsY3VsYXRpb25JRDo6R3JhbT47CnRlbXBsYXRlPGNsYXNzIFQ+IHVzaW5nIE5ld3Rvbgk9IENhbGN1bGF0aW9uVHlwZTxULCBDYWxjdWxhdGlvbklEOjpOZXd0b24+Owp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBNZXRyaWMJPSBDYWxjdWxhdGlvblR5cGU8VCwgQ2FsY3VsYXRpb25JRDo6TWV0cmljPjsKdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgR3Jhdml0eSA9IENhbGN1bGF0aW9uVHlwZTxULCBDYWxjdWxhdGlvbklEOjpHcmF2aXR5Q29uc3RhbnQ+Owp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBWZWxvY2l0eT0gQ2FsY3VsYXRpb25UeXBlPFQsIENhbGN1bGF0aW9uSUQ6OlZlbG9jaXR5PjsKdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgU2Vjb25kID0gQ2FsY3VsYXRpb25UeXBlPFQsIENhbGN1bGF0aW9uSUQ6OlNlY29uZD47CnRlbXBsYXRlPGNsYXNzIFQ+IHVzaW5nIEFtcGVyZSA9IENhbGN1bGF0aW9uVHlwZTxULCBDYWxjdWxhdGlvbklEOjpBbXBlcmU+Owp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBLZWx2aW4gPSBDYWxjdWxhdGlvblR5cGU8VCwgQ2FsY3VsYXRpb25JRDo6S2VsdmluPjsKdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgTW9sID0gQ2FsY3VsYXRpb25UeXBlIDwgVCwgQ2FsY3VsYXRpb25JRDo6TW9sPiA7CnRlbXBsYXRlPGNsYXNzIFQ+IHVzaW5nIENhbmRlbGEgPSBDYWxjdWxhdGlvblR5cGUgPCBULCBDYWxjdWxhdGlvbklEOjpDYW5kZWxhPiA7Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBUIFN0cm9uZ0dyYXZpdHlDb25zdGFudCA9IDYuNjc0MzE7CnRlbXBsYXRlPGNsYXNzIFQ+IFQgV2Vla0dyYXZpdHlDb25zdGFudCA9IDYuNjc0MDg7CnRlbXBsYXRlPGNsYXNzIFQ+IFQgR3Jhdml0eUNvbnN0YW50TXVsdGlwbGVyID0gKDEuMCAvIDEwMDAwMDAwMDAwMCk7Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBUIFBsYW5ja0NvbnN0YW50X2g9ezYuNjI2MDcwMTVlLTM0fTsKdGVtcGxhdGU8Y2xhc3MgVD4gVCBTSV9hID0gOS44MDY2NTsKCgp0ZW1wbGF0ZTxjbGFzcyBUPiBUIEF0dG8gPSAwLjAwMDAwMDAwMDAwMDAwMDAwMTsKdGVtcGxhdGU8Y2xhc3MgVD4gVCBGZW10byA9IDAuMDAwMDAwMDAwMDAwMDAxOwp0ZW1wbGF0ZTxjbGFzcyBUPiBUIFBpY28gPSAwLjAwMDAwMDAwMDAwMTsKdGVtcGxhdGU8Y2xhc3MgVD4gVCBOYW5vID0gMC4wMDAwMDAwMDE7CnRlbXBsYXRlPGNsYXNzIFQ+IFQgTWljcm8gPSAwLjAwMDAwMTsKdGVtcGxhdGU8Y2xhc3MgVD4gVCBNaWxsaSA9IDAuMDAxOwp0ZW1wbGF0ZTxjbGFzcyBUPiBUIENlbnRpID0gMC4wMTsKdGVtcGxhdGU8Y2xhc3MgVD4gVCBEZWNpID0gMC4xOwp0ZW1wbGF0ZTxjbGFzcyBUPiBUIFplcm8gPSAwOwp0ZW1wbGF0ZTxjbGFzcyBUPiBUIE9uZSA9IDE7CnRlbXBsYXRlPGNsYXNzIFQ+IFQgRGVjYSA9IDEwLjA7CnRlbXBsYXRlPGNsYXNzIFQ+IFQgSGVjdG8gPSAxMDAuMDsKdGVtcGxhdGU8Y2xhc3MgVD4gVCBLaWxvID0gMTAwMC4wOwp0ZW1wbGF0ZTxjbGFzcyBUPiBUIE1lZ2EgPSAxMDAwMDAwLjA7CnRlbXBsYXRlPGNsYXNzIFQ+IFQgR2lnYSA9IDEwMDAwMDAwMDAuMDsKdGVtcGxhdGU8Y2xhc3MgVD4gVCBUZXJhID0gMTAwMDAwMDAwMDAwMC4wOwoKdGVtcGxhdGU8Y2xhc3MgVD4gR3JhbTxUPiBPbmVKYXBhblllbnsgMSB9Owp0ZW1wbGF0ZTxjbGFzcyBUPiBTZWNvbmQ8VD4gT25lTWV0cmV7MS4wLzI5OTc5MjQ1OC4wfTsvL+WFieOBrumAsuOCgOmAn+W6puOBrjEvMjk5NzkyNDU4Cg==