54template<
typename U1,
typename U2,
typename EX>
70 typedef typename EX::EUnitCode EExCode;
71 CExCode(
void) : m_code(0) {}
72 CExCode(EExCode code) : m_code(code) {}
73 int ToInt(
void)
const {
return m_code; };
84 typedef typename U1::EUnitCode EU1Code;
85 typedef typename EX::EUnitCode EExCode;
87 CNumeCode(
void) : m_code(0) {}
88 CNumeCode(EU1Code code) : m_code(code) {}
90 CNumeCode(CVuU1Code code) : m_code(code.ToInt()) {}
91 explicit CNumeCode(CExCode code) : m_code(code.ToInt()) {}
92 operator EU1Code(
void)
const {
return EU1Code(HasPfCode() ? 0 : m_code); }
94 operator EExCode(
void)
const {
return EExCode(
HasExCode() ? m_code : 0); }
95 bool operator==(
const CNumeCode& c)
const {
return m_code == c.m_code; }
96 bool operator!=(
const CNumeCode& c)
const {
return m_code != c.m_code; }
97 bool HasPfCode(
void)
const {
return (m_code & PFCODE) != 0; }
98 bool HasExCode(
void)
const {
return (m_code & U1::EXCODE) != 0; }
99 int ToInt(
void)
const {
return m_code; };
100 EU1Code GetU1Code(
void)
const {
return EU1Code(m_code); };
101 EExCode GetExCode(
void)
const {
return EExCode(m_code); };
102 CVuU1Code GetCode(
void)
const
118 typedef typename U2::EUnitCode EU2Code;
120 CDenoCode(
void) : m_code(0) {}
121 CDenoCode(EU2Code code) : m_code(code) {}
123 CDenoCode(CVuU2Code code) : m_code(code.ToInt()) {}
124 operator EU2Code(
void)
const {
return EU2Code(HasPfCode() ? 0 : m_code); }
126 bool operator==(
const CDenoCode& c)
const {
return m_code == c.m_code; }
127 bool operator!=(
const CDenoCode& c)
const {
return m_code != c.m_code; }
128 bool HasPfCode(
void)
const {
return (m_code & U2::PFCODE) != 0; }
129 int ToInt(
void)
const {
return m_code; };
130 EU2Code GetU2Code(
void)
const {
return EU2Code(m_code); };
131 CVuU2Code GetCode(
void)
const
144 CNumeCode m_numeCode;
145 CDenoCode m_denoCode;
148 void m_ToUnit(CNumeCode code)
150 if ( m_numeCode != code )
153 if ( code.HasExCode() )
155 if ( m_numeCode.ToInt() != 0 )
158 u1.
Set(m_value, m_numeCode.GetU1Code());
159 m_value = u1.
GetValue(U1::EUnitCode(0));
161 if ( m_denoCode.ToInt() != 0 )
164 u2.
Set(1, U2::EUnitCode(0));
165 m_value *= u2.
GetValue(m_denoCode.GetU2Code());
166 m_denoCode = U2::EUnitCode(0);
168 const TUnitParam* P = EX::GetParam(code.GetExCode());
175 u.
Set(m_value, m_numeCode.GetU1Code());
176 u.
ToUnit(code.GetU1Code());
186 enum { KINDCODE = EX::KINDCODE };
202 : _super(), m_value(v), m_numeCode(), m_denoCode()
213 : _super(), m_value(v), m_numeCode(code), m_denoCode()
225 : _super(), m_value(v), m_numeCode(c1), m_denoCode(c2)
248 m_numeCode = CNumeCode(code);
249 m_denoCode = CDenoCode();
302 CStr ToString(CNumeCode c1, CDenoCode c2, LPCTSTR lpszFormat = NULL)
const
317 return m_numeCode.HasExCode();
349 if ( m_numeCode.HasExCode() )
369 if ( m_numeCode.HasExCode() )
387 if ( m_numeCode.HasExCode() )
390 const TUnitParam* P = EX::GetParam(m_numeCode.GetExCode());
393 m_numeCode = U1::EUnitCode(0);
394 m_denoCode = U2::EUnitCode(0);
406 m_ToUnit(CNumeCode(code));
431 if ( m_numeCode.HasExCode() )
433 const TUnitParam* P = EX::GetParam(m_numeCode.GetExCode());
436 m_numeCode = U1::EUnitCode(0);
437 m_denoCode = U2::EUnitCode(0);
439 if ( m_denoCode != code )
442 u.
Set(1, code.GetU2Code());
443 u.
ToUnit(m_denoCode.GetU2Code());
495 m_value += u.
GetValue(m_numeCode, m_denoCode);
552 m_value -= u.
GetValue(m_numeCode, m_denoCode);
599 u.m_value = v - u.m_value;
707 return m_value / u.
GetValue(m_numeCode, m_denoCode);
774 return EX::GetKindString();
810 enum { KINDCODE =
'SP' };
831 { _T(
"kph"), _T(
"時速"), 3600.0 * 1.0E-3 },
832 { _T(
"fpm"), _T(
"fpm"), 60.0 * 3.28084 },
833 { _T(
"kt"), _T(
"ノット"), 3600.0 / 1852.0 },
835 int c = code - EXCODE;
836 if ( c >= 0 && c < countof(A) )
898 return s * (one / f);
924 enum { KINDCODE =
'AC' };
944 { _T(
"Gal"), _T(
"ガル"), 100 },
945 { _T(
"G"), _T(
"重力加速度"), 1.0 / 9.80665 },
947 int c = code - EXCODE;
948 if ( c >= 0 && c < countof(A) )
1090 enum { KINDCODE =
'2D' };
1168 enum { KINDCODE =
'DE' };
1246 enum { KINDCODE =
'FL' };
1321 enum { KINDCODE = 0 };
1346template <
typename U1,
typename U2>
1354 enum { KINDCODE = U1::KINDCODE * 0x1000 + U2::KINDCODE };
1363 s.
Format(_T(
"%s 毎 %s"), U1::GetKindString(), U2::GetKindString());
CStr ToString(LPCTSTR lpszFormat=NULL) const
[取得] 文字列作成
void Format(const TYP *lpszFormat,...)
[代入] 書式付き文字列代入.
@ GAL
Gal 1 Gal = 1 cm/s2 = 0.01 m/s2
@ G
重力加速度 1 G = 9.80665 m/s2
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
friend CValueParT operator/(const CValueUnitT< U1 > &u1, const CValueUnitT< U2 > &u2)
[計算] 割算 (本クラス = 分子単位 ÷ 分母単位).
CValueParT(const CRealNumber &v, CNumeCode c1, CDenoCode c2)
コンストラクタ.
static CStr GetKindString(void)
[取得] 単位種文字列取得
void Set(const CRealNumber &v, CNumeCode c1, CDenoCode c2)
[代入] 値、単位設定 指定の値、単位を記憶します。
friend CValueParUnitT operator-(const CRealNumber &v, const CValueParUnitT &u)
[計算] 減算.
CValueParUnitT & operator+=(const CRealNumber &v)
[計算] 加算代入.
friend CValueUnitT< U1 > operator*(const CValueUnitT< U2 > &t, const CValueParUnitT &s)
[計算] 掛算 (分子単位 = 分母単位 × 本クラス)
CValueParUnitT operator-(const CValueParUnitT &u) const
[計算] 単位付値減算.
CDenoCode GetDenoUnitCode(void) const
[取得] 分母単位コード取得.
void Set(const CRealNumber &v)
[代入] 値、単位設定 指定の値を記憶します。単位は変化しません。
CValueParUnitT(void)
コンストラクタ.
bool operator!=(const CValueParUnitT &t) const
[確認] 比較
CStr GetUnitJapanString(void) const
[取得] 単位マーク文字列取得.
CValueParUnitT operator*(const CRealNumber &v) const
[計算] 掛算.
CValueParUnitT operator-(const CRealNumber &v) const
[計算] 減算.
bool operator<(const CValueParUnitT &t) const
[確認] 比較
bool operator>=(const CValueParUnitT &t) const
[確認] 比較
CValueParUnitT operator/(const CRealNumber &v) const
[計算] 割算.
CValueParUnitT & operator+=(const CValueParUnitT &u)
[計算] 単位付値加算代入.
CValueParUnitT & operator*=(const CRealNumber &v)
[計算] 掛算代入.
friend CValueUnitT< U2 > operator/(const CValueUnitT< U1 > &d, const CValueParUnitT &s)
[計算] 割算 (分母単位 = 分子単位 ÷ 本クラス).
CRealNumber GetValue(void) const
[取得] 値取得.
bool operator==(const CValueParUnitT &t) const
[確認] 比較
friend CValueParUnitT operator*(const CRealNumber &v, const CValueParUnitT &u)
[計算] 掛算.
bool HasExCode(void) const
[確認] 単位コード確認.
CNumeCode GetUnitCode(void) const
[取得] 単位コード取得.
CValueParUnitT operator+(const CValueParUnitT &u) const
[計算] 加算.
bool operator>(const CValueParUnitT &t) const
[確認] 比較
CValueParUnitT & operator/=(const CRealNumber &v)
[計算] 割算代入.
CStr ToString(CExCode code, LPCTSTR lpszFormat=NULL) const
[取得] 文字列で取得 (拡張単位指定あり)
static DWORD GetUnitKindCode(void)
[取得] 単位種コード取得
CStr GetUnitMarkString(void) const
[取得] 単位マーク文字列取得.
static CStr GetUnitKindString(void)
[取得] 単位種文字列取得
void ToNormalUnit(void)
[変換] 単位変更 (基本単位へ).
CValueParUnitT & ToUnit(CExCode code)
[変換] 単位変更.
CRealNumber operator/(const CValueParUnitT &u) const
[計算] 割算 (値 = 本クラス ÷ 本クラス).
CStr ToString(CNumeCode c1, CDenoCode c2, LPCTSTR lpszFormat=NULL) const
[取得] 文字列で取得 (拡張単位指定あり)
CValueParUnitT operator+(const CRealNumber &v) const
[計算] 加算.
CValueUnitT< U1 > operator*(const CValueUnitT< U2 > &t) const
[計算] 掛算 (分子単位 = 本クラス × 分母単位).
CValueParUnitT(const CRealNumber &v, CExCode code)
コンストラクタ.
CValueParUnitT & operator-=(const CValueParUnitT &u)
[計算] 単位付値減算代入.
CValueParUnitT(const CRealNumber &v, CNumeCode c1, CDenoCode c2)
コンストラクタ.
bool operator<=(const CValueParUnitT &t) const
[確認] 比較
void Set(const CRealNumber &v, CExCode code)
[代入] 値、単位設定 指定の値、単位を記憶します。
CRealNumber GetValue(CExCode code) const
[取得] 値取得 (単位指定).
CStr ToString(LPCTSTR lpszFormat=NULL) const
[取得] 文字列で取得
CValueParUnitT(const CRealNumber &v)
コンストラクタ.
CValueParUnitT & ToUnit(CNumeCode c1, CDenoCode c2)
[変換] 単位変更.
CRealNumber GetValue(CNumeCode c1, CDenoCode c2) const
[取得] 値取得 (単位指定).
CValueParUnitT & operator-=(const CRealNumber &v)
[計算] 減算代入.
CValueParUnitT & ToDenoUnit(CDenoCode code)
[変換] 単位変更.
friend CValueParUnitT operator+(const CRealNumber &v, const CValueParUnitT &u)
[計算] 加算.
void Set(const CRealNumber &v)
[代入] 値設定 指定の値を設定します。単位は変化しません。
CStr GetUnitJapanString(void) const
[取得] 単位意味文字列取得.
CCode GetUnitCode(void) const
[取得] 単位コード取得.
CRealNumber GetValue(void) const
[取得] 値取得.
CStr GetUnitMarkString(void) const
[取得] 単位マーク文字列取得.
CValueUnitT & ToUnit(CCode code)
[変換] 単位変更.
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
CValueAcceleration operator*(const CValueSpeed &s, const CValueFrequency &f)
[計算] 掛算 (加速度 = 速度 × 周波数) .
CValueParUnitT< CUnitCubic, CUnitTime, CUnitFlux > CValueFlux
流量管理クラス
CValueParUnitT< CUnitWeight, CUnitArea, CUnitDensity2 > CValueDensity2
面積密度管理クラス
CValueParUnitT< CUnitWeight, CUnitCubic, CUnitDensity3 > CValueDensity3
体積密度管理クラス
CValueParUnitT< CUnitDistance, CUnitTime, CUnitSpeed > CValueSpeed
速度管理クラス
CValueSpeed operator/(const CValueDistance &d, const CValueTime &t)
[計算] 割算 (速度 = 距離 ÷ 時間).
CValueParUnitT< CUnitDistance, CUnitTime2, CUnitAcceleration > CValueAcceleration
加速度管理クラス