Add StellarClass helpers for StarDB Ver. 0x0200 (Backport from 1.7)
Closes: #802 Due to emerge of Spectral_Ypull/821/head
parent
2075220600
commit
ba59db4a1d
|
@ -148,17 +148,37 @@ string StellarClass::str() const
|
||||||
|
|
||||||
|
|
||||||
uint16
|
uint16
|
||||||
StellarClass::pack() const
|
StellarClass::packV1() const
|
||||||
{
|
{
|
||||||
|
// StarDB Ver. 0x0100 doesn't support Spectral_Y.
|
||||||
|
// Classes following Spectral_Y are shifted by 1.
|
||||||
|
uint16_t sc;
|
||||||
|
if (specClass == Spectral_Y)
|
||||||
|
sc = (uint16_t) Spectral_Unknown;
|
||||||
|
else
|
||||||
|
sc = (uint16_t) specClass > Spectral_Y ? specClass - 1 : specClass;
|
||||||
|
|
||||||
return (((uint16) starType << 12) |
|
return (((uint16) starType << 12) |
|
||||||
(((uint16) specClass & 0xf) << 8) |
|
(((uint16) sc & 0x0f) << 8) |
|
||||||
((uint16) subclass << 4) |
|
((uint16) subclass << 4) |
|
||||||
((uint16) lumClass));
|
((uint16) lumClass));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16
|
||||||
|
StellarClass::packV2() const
|
||||||
|
{
|
||||||
|
uint16_t sc = (starType == StellarClass::WhiteDwarf ? specClass - 1 : specClass);
|
||||||
|
|
||||||
|
return (((uint16) starType << 13) |
|
||||||
|
(((uint16) sc & 0x1f) << 8) |
|
||||||
|
(((uint16) subclass & 0x0f) << 4) |
|
||||||
|
((uint16) lumClass & 0x0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
StellarClass::unpack(uint16 st)
|
StellarClass::unpackV1(uint16 st)
|
||||||
{
|
{
|
||||||
starType = static_cast<StellarClass::StarType>(st >> 12);
|
starType = static_cast<StellarClass::StarType>(st >> 12);
|
||||||
|
|
||||||
|
@ -166,6 +186,43 @@ StellarClass::unpack(uint16 st)
|
||||||
{
|
{
|
||||||
case NormalStar:
|
case NormalStar:
|
||||||
specClass = static_cast<SpectralClass>(st >> 8 & 0xf);
|
specClass = static_cast<SpectralClass>(st >> 8 & 0xf);
|
||||||
|
// StarDB Ver. 0x0100 doesn't support Spectral_Y
|
||||||
|
// Spectral_Y has the value Spectral_C had earlier.
|
||||||
|
if (specClass == Spectral_Y)
|
||||||
|
specClass = Spectral_C;
|
||||||
|
subclass = st >> 4 & 0xf;
|
||||||
|
lumClass = static_cast<LuminosityClass>(st & 0xf);
|
||||||
|
break;
|
||||||
|
case WhiteDwarf:
|
||||||
|
if ((st >> 8 & 0xf) >= WDClassCount)
|
||||||
|
return false;
|
||||||
|
specClass = static_cast<SpectralClass>((st >> 8 & 0xf) + Spectral_DA);
|
||||||
|
subclass = st >> 4 & 0xf;
|
||||||
|
lumClass = Lum_Unknown;
|
||||||
|
break;
|
||||||
|
case NeutronStar:
|
||||||
|
case BlackHole:
|
||||||
|
specClass = Spectral_Unknown;
|
||||||
|
subclass = Subclass_Unknown;
|
||||||
|
lumClass = Lum_Unknown;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
StellarClass::unpackV2(uint16_t st)
|
||||||
|
{
|
||||||
|
starType = static_cast<StellarClass::StarType>(st >> 13);
|
||||||
|
|
||||||
|
switch (starType)
|
||||||
|
{
|
||||||
|
case NormalStar:
|
||||||
|
specClass = static_cast<SpectralClass>(st >> 8 & 0x1f);
|
||||||
subclass = st >> 4 & 0xf;
|
subclass = st >> 4 & 0xf;
|
||||||
lumClass = static_cast<LuminosityClass>(st & 0xf);
|
lumClass = static_cast<LuminosityClass>(st & 0xf);
|
||||||
break;
|
break;
|
||||||
|
@ -204,7 +261,7 @@ ostream& operator<<(ostream& os, const StellarClass& sc)
|
||||||
|
|
||||||
bool operator<(const StellarClass& sc0, const StellarClass& sc1)
|
bool operator<(const StellarClass& sc0, const StellarClass& sc1)
|
||||||
{
|
{
|
||||||
return sc0.pack() < sc1.pack();
|
return sc0.packV2() < sc1.packV2();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -105,8 +105,16 @@ public:
|
||||||
|
|
||||||
friend bool operator<(const StellarClass& sc0, const StellarClass& sc1);
|
friend bool operator<(const StellarClass& sc0, const StellarClass& sc1);
|
||||||
|
|
||||||
uint16 pack() const;
|
// methods for StarDB Ver. 0x0100
|
||||||
bool unpack(uint16);
|
uint16 packV1() const;
|
||||||
|
bool unpackV1(uint16);
|
||||||
|
|
||||||
|
// methods for StarDB Ver. 0x0200
|
||||||
|
uint16 packV2() const;
|
||||||
|
bool unpackV2(uint16_t);
|
||||||
|
|
||||||
|
inline uint16 pack() const;
|
||||||
|
inline bool unpack(uint16);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
StarType starType;
|
StarType starType;
|
||||||
|
@ -162,4 +170,13 @@ StellarClass::LuminosityClass StellarClass::getLuminosityClass() const
|
||||||
return lumClass;
|
return lumClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16 StellarClass::pack() const
|
||||||
|
{
|
||||||
|
return packV1();
|
||||||
|
}
|
||||||
|
bool StellarClass::unpack(uint16 t)
|
||||||
|
{
|
||||||
|
return unpackV1(t);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // _STELLARCLASS_H_
|
#endif // _STELLARCLASS_H_
|
||||||
|
|
Loading…
Reference in New Issue