Add user-defined literals for physical quantities

Fixes #14
This commit is contained in:
Lars Toenning
2020-07-16 19:16:47 +02:00
parent 368dd1f46d
commit 6cf7571dff
3 changed files with 882 additions and 0 deletions

View File

@@ -0,0 +1,468 @@
/* Copyright (C) 2020
* swift project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated,
* or distributed except according to the terms contained in the LICENSE file.
*/
#include "blackmisc/pq/literals.h"
#include "blackmisc/pq/acceleration.h"
#include "blackmisc/pq/angle.h"
#include "blackmisc/pq/frequency.h"
#include "blackmisc/pq/length.h"
#include "blackmisc/pq/mass.h"
#include "blackmisc/pq/pressure.h"
#include "blackmisc/pq/speed.h"
#include "blackmisc/pq/temperature.h"
#include "blackmisc/pq/time.h"
#include "blackmisc/pq/units.h"
namespace BlackMisc
{
namespace PhysicalQuantities
{
namespace Literals
{
CAcceleration operator ""_ft_s2(long double value)
{
return {static_cast<double>(value), CAccelerationUnit::ft_s2()};
}
CAcceleration operator ""_ft_s2(unsigned long long value)
{
return {static_cast<double>(value), CAccelerationUnit::ft_s2()};
}
CAcceleration operator ""_m_s2(long double value)
{
return {static_cast<double>(value), CAccelerationUnit::m_s2()};
}
CAcceleration operator ""_m_s2(unsigned long long value)
{
return {static_cast<double>(value), CAccelerationUnit::m_s2()};
}
CAngle operator ""_deg(long double value)
{
return {static_cast<double>(value), CAngleUnit::deg()};
}
CAngle operator ""_deg(unsigned long long value)
{
return {static_cast<double>(value), CAngleUnit::deg()};
}
CAngle operator ""_rad(long double value)
{
return {static_cast<double>(value), CAngleUnit::rad()};
}
CAngle operator ""_rad(unsigned long long value)
{
return {static_cast<double>(value), CAngleUnit::rad()};
}
CFrequency operator ""_Hz(long double value)
{
return {static_cast<double>(value), CFrequencyUnit::Hz()};
}
CFrequency operator ""_Hz(unsigned long long value)
{
return {static_cast<double>(value), CFrequencyUnit::Hz()};
}
CFrequency operator ""_kHz(long double value)
{
return {static_cast<double>(value), CFrequencyUnit::kHz()};
}
CFrequency operator ""_kHz(unsigned long long value)
{
return {static_cast<double>(value), CFrequencyUnit::kHz()};
}
CFrequency operator ""_MHz(long double value)
{
return {static_cast<double>(value), CFrequencyUnit::MHz()};
}
CFrequency operator ""_MHz(unsigned long long value)
{
return {static_cast<double>(value), CFrequencyUnit::MHz()};
}
CFrequency operator ""_GHz(long double value)
{
return {static_cast<double>(value), CFrequencyUnit::GHz()};
}
CFrequency operator ""_GHz(unsigned long long value)
{
return {static_cast<double>(value), CFrequencyUnit::GHz()};
}
CLength operator ""_m(long double value)
{
return {static_cast<double>(value), CLengthUnit::m()};
}
CLength operator ""_m(unsigned long long value)
{
return {static_cast<double>(value), CLengthUnit::m()};
}
CLength operator ""_NM(long double value)
{
return {static_cast<double>(value), CLengthUnit::NM()};
}
CLength operator ""_NM(unsigned long long value)
{
return {static_cast<double>(value), CLengthUnit::NM()};
}
CLength operator ""_SM(long double value)
{
return {static_cast<double>(value), CLengthUnit::SM()};
}
CLength operator ""_SM(unsigned long long value)
{
return {static_cast<double>(value), CLengthUnit::SM()};
}
CLength operator ""_cm(long double value)
{
return {static_cast<double>(value), CLengthUnit::cm()};
}
CLength operator ""_cm(unsigned long long value)
{
return {static_cast<double>(value), CLengthUnit::cm()};
}
CLength operator ""_ft(long double value)
{
return {static_cast<double>(value), CLengthUnit::ft()};
}
CLength operator ""_ft(unsigned long long value)
{
return {static_cast<double>(value), CLengthUnit::ft()};
}
CLength operator ""_km(long double value)
{
return {static_cast<double>(value), CLengthUnit::km()};
}
CLength operator ""_km(unsigned long long value)
{
return {static_cast<double>(value), CLengthUnit::km()};
}
CLength operator ""_mi(long double value)
{
return {static_cast<double>(value), CLengthUnit::mi()};
}
CLength operator ""_mi(unsigned long long value)
{
return {static_cast<double>(value), CLengthUnit::mi()};
}
CMass operator ""_g(long double value)
{
return {static_cast<double>(value), CMassUnit::g()};
}
CMass operator ""_g(unsigned long long value)
{
return {static_cast<double>(value), CMassUnit::g()};
}
CMass operator ""_kg(long double value)
{
return {static_cast<double>(value), CMassUnit::kg()};
}
CMass operator ""_kg(unsigned long long value)
{
return {static_cast<double>(value), CMassUnit::kg()};
}
CMass operator ""_lb(long double value)
{
return {static_cast<double>(value), CMassUnit::lb()};
}
CMass operator ""_lb(unsigned long long value)
{
return {static_cast<double>(value), CMassUnit::lb()};
}
CMass operator ""_tonne(long double value)
{
return {static_cast<double>(value), CMassUnit::tonne()};
}
CMass operator ""_tonne(unsigned long long value)
{
return {static_cast<double>(value), CMassUnit::tonne()};
}
CMass operator ""_shortTon(long double value)
{
return {static_cast<double>(value), CMassUnit::shortTon()};
}
CMass operator ""_shortTon(unsigned long long value)
{
return {static_cast<double>(value), CMassUnit::shortTon()};
}
CPressure operator ""_Pa(long double value)
{
return {static_cast<double>(value), CPressureUnit::Pa()};
}
CPressure operator ""_Pa(unsigned long long value)
{
return {static_cast<double>(value), CPressureUnit::Pa()};
}
CPressure operator ""_bar(long double value)
{
return {static_cast<double>(value), CPressureUnit::bar()};
}
CPressure operator ""_bar(unsigned long long value)
{
return {static_cast<double>(value), CPressureUnit::bar()};
}
CPressure operator ""_hPa(long double value)
{
return {static_cast<double>(value), CPressureUnit::hPa()};
}
CPressure operator ""_hPa(unsigned long long value)
{
return {static_cast<double>(value), CPressureUnit::hPa()};
}
CPressure operator ""_psi(long double value)
{
return {static_cast<double>(value), CPressureUnit::psi()};
}
CPressure operator ""_psi(unsigned long long value)
{
return {static_cast<double>(value), CPressureUnit::psi()};
}
CPressure operator ""_inHg(long double value)
{
return {static_cast<double>(value), CPressureUnit::inHg()};
}
CPressure operator ""_inHg(unsigned long long value)
{
return {static_cast<double>(value), CPressureUnit::inHg()};
}
CPressure operator ""_mbar(long double value)
{
return {static_cast<double>(value), CPressureUnit::mbar()};
}
CPressure operator ""_mbar(unsigned long long value)
{
return {static_cast<double>(value), CPressureUnit::mbar()};
}
CPressure operator ""_mmHg(long double value)
{
return {static_cast<double>(value), CPressureUnit::mmHg()};
}
CPressure operator ""_mmHg(unsigned long long value)
{
return {static_cast<double>(value), CPressureUnit::mmHg()};
}
CSpeed operator ""_kts(long double value)
{
return {static_cast<double>(value), CSpeedUnit::kts()};
}
CSpeed operator ""_kts(unsigned long long value)
{
return {static_cast<double>(value), CSpeedUnit::kts()};
}
CSpeed operator ""_m_s(long double value)
{
return {static_cast<double>(value), CSpeedUnit::m_s()};
}
CSpeed operator ""_m_s(unsigned long long value)
{
return {static_cast<double>(value), CSpeedUnit::m_s()};
}
CSpeed operator ""_NM_h(long double value)
{
return {static_cast<double>(value), CSpeedUnit::NM_h()};
}
CSpeed operator ""_NM_h(unsigned long long value)
{
return {static_cast<double>(value), CSpeedUnit::NM_h()};
}
CSpeed operator ""_ft_s(long double value)
{
return {static_cast<double>(value), CSpeedUnit::ft_s()};
}
CSpeed operator ""_ft_s(unsigned long long value)
{
return {static_cast<double>(value), CSpeedUnit::ft_s()};
}
CSpeed operator ""_km_h(long double value)
{
return {static_cast<double>(value), CSpeedUnit::km_h()};
}
CSpeed operator ""_km_h(unsigned long long value)
{
return {static_cast<double>(value), CSpeedUnit::km_h()};
}
CSpeed operator ""_ft_min(long double value)
{
return {static_cast<double>(value), CSpeedUnit::ft_min()};
}
CSpeed operator ""_ft_min(unsigned long long value)
{
return {static_cast<double>(value), CSpeedUnit::ft_min()};
}
CTemperature operator ""_degC(long double value)
{
return {static_cast<double>(value), CTemperatureUnit::C()};
}
CTemperature operator ""_degC(unsigned long long value)
{
return {static_cast<double>(value), CTemperatureUnit::C()};
}
CTemperature operator ""_degF(long double value)
{
return {static_cast<double>(value), CTemperatureUnit::F()};
}
CTemperature operator ""_degF(unsigned long long value)
{
return {static_cast<double>(value), CTemperatureUnit::F()};
}
CTemperature operator ""_degK(long double value)
{
return {static_cast<double>(value), CTemperatureUnit::K()};
}
CTemperature operator ""_degK(unsigned long long value)
{
return {static_cast<double>(value), CTemperatureUnit::K()};
}
CTime operator ""_d(long double value)
{
return {static_cast<double>(value), CTimeUnit::d()};
}
CTime operator ""_d(unsigned long long value)
{
return {static_cast<double>(value), CTimeUnit::d()};
}
CTime operator ""_h(long double value)
{
return {static_cast<double>(value), CTimeUnit::h()};
}
CTime operator ""_h(unsigned long long value)
{
return {static_cast<double>(value), CTimeUnit::h()};
}
CTime operator ""_s(long double value)
{
return {static_cast<double>(value), CTimeUnit::s()};
}
CTime operator ""_s(unsigned long long value)
{
return {static_cast<double>(value), CTimeUnit::s()};
}
CTime operator ""_ms(long double value)
{
return {static_cast<double>(value), CTimeUnit::ms()};
}
CTime operator ""_ms(unsigned long long value)
{
return {static_cast<double>(value), CTimeUnit::ms()};
}
CTime operator ""_min(long double value)
{
return {static_cast<double>(value), CTimeUnit::min()};
}
CTime operator ""_min(unsigned long long value)
{
return {static_cast<double>(value), CTimeUnit::min()};
}
CTime operator ""_hms(long double value)
{
return {static_cast<double>(value), CTimeUnit::hms()};
}
CTime operator ""_hms(unsigned long long value)
{
return {static_cast<double>(value), CTimeUnit::hms()};
}
CTime operator ""_hrmin(long double value)
{
return {static_cast<double>(value), CTimeUnit::hrmin()};
}
CTime operator ""_hrmin(unsigned long long value)
{
return {static_cast<double>(value), CTimeUnit::hrmin()};
}
CTime operator ""_minsec(long double value)
{
return {static_cast<double>(value), CTimeUnit::minsec()};
}
CTime operator ""_minsec(unsigned long long value)
{
return {static_cast<double>(value), CTimeUnit::minsec()};
}
}
}
}

299
src/blackmisc/pq/literals.h Normal file
View File

@@ -0,0 +1,299 @@
/* Copyright (C) 2020
* swift project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated,
* or distributed except according to the terms contained in the LICENSE file.
*/
//! \file
#ifndef BLACKMISC_PQ_LITERALS_H
#define BLACKMISC_PQ_LITERALS_H
#include "blackmisc/blackmiscexport.h"
namespace BlackMisc
{
namespace PhysicalQuantities
{
class CAcceleration;
class CAngle;
class CFrequency;
class CLength;
class CMass;
class CPressure;
class CSpeed;
class CTemperature;
class CTime;
namespace Literals
{
//! User-defined literal for ft/s^2
//! @{
BLACKMISC_EXPORT CAcceleration operator ""_ft_s2(long double);
BLACKMISC_EXPORT CAcceleration operator ""_ft_s2(unsigned long long);
//! @}
//! User-defined literal for m/s^2
//! @{
BLACKMISC_EXPORT CAcceleration operator ""_m_s2(long double);
BLACKMISC_EXPORT CAcceleration operator ""_m_s2(unsigned long long);
//! @}
//! User-defined literal for degrees (Angle)
//! @{
BLACKMISC_EXPORT CAngle operator ""_deg(long double);
BLACKMISC_EXPORT CAngle operator ""_deg(unsigned long long);
//! @}
//! User-defined literal for radian
//! @{
BLACKMISC_EXPORT CAngle operator ""_rad(long double);
BLACKMISC_EXPORT CAngle operator ""_rad(unsigned long long);
//! @}
//! User-defined literal for hertz
//! @{
BLACKMISC_EXPORT CFrequency operator ""_Hz(long double);
BLACKMISC_EXPORT CFrequency operator ""_Hz(unsigned long long);
//! @}
//! User-defined literal for kilohertz
//! @{
BLACKMISC_EXPORT CFrequency operator ""_kHz(long double);
BLACKMISC_EXPORT CFrequency operator ""_kHz(unsigned long long);
//! @}
//! User-defined literal for megahertz
//! @{
BLACKMISC_EXPORT CFrequency operator ""_MHz(long double);
BLACKMISC_EXPORT CFrequency operator ""_MHz(unsigned long long);
//! @}
//! User-defined literal for gigahertz
//! @{
BLACKMISC_EXPORT CFrequency operator ""_GHz(long double);
BLACKMISC_EXPORT CFrequency operator ""_GHz(unsigned long long);
//! @}
//! User-defined literal for meters
//! @{
BLACKMISC_EXPORT CLength operator ""_m(long double);
BLACKMISC_EXPORT CLength operator ""_m(unsigned long long);
//! @}
//! User-defined literal for nautical miles
//! @{
BLACKMISC_EXPORT CLength operator ""_NM(long double);
BLACKMISC_EXPORT CLength operator ""_NM(unsigned long long);
//! @}
//! User-defined literal for statute miles
//! @{
BLACKMISC_EXPORT CLength operator ""_SM(long double);
BLACKMISC_EXPORT CLength operator ""_SM(unsigned long long);
//! @}
//! User-defined literal for centimeters
//! @{
BLACKMISC_EXPORT CLength operator ""_cm(long double);
BLACKMISC_EXPORT CLength operator ""_cm(unsigned long long);
//! @}
//! User-defined literal for feet
//! @{
BLACKMISC_EXPORT CLength operator ""_ft(long double);
BLACKMISC_EXPORT CLength operator ""_ft(unsigned long long);
//! @}
//! User-defined literal for kilometer
//! @{
BLACKMISC_EXPORT CLength operator ""_km(long double);
BLACKMISC_EXPORT CLength operator ""_km(unsigned long long);
//! @}
//! User-defined literal for miles
//! @{
BLACKMISC_EXPORT CLength operator ""_mi(long double);
BLACKMISC_EXPORT CLength operator ""_mi(unsigned long long);
//! @}
//! User-defined literal for grams
//! @{
BLACKMISC_EXPORT CMass operator ""_g(long double);
BLACKMISC_EXPORT CMass operator ""_g(unsigned long long);
//! @}
//! User-defined literal for kilograms
//! @{
BLACKMISC_EXPORT CMass operator ""_kg(long double);
BLACKMISC_EXPORT CMass operator ""_kg(unsigned long long);
//! @}
//! User-defined literal for pounds
//! @{
BLACKMISC_EXPORT CMass operator ""_lb(long double);
BLACKMISC_EXPORT CMass operator ""_lb(unsigned long long);
//! @}
//! User-defined literal for tonnes
//! @{
BLACKMISC_EXPORT CMass operator ""_tonne(long double);
BLACKMISC_EXPORT CMass operator ""_tonne(unsigned long long);
//! @}
//! User-defined literal for US-ton
//! @{
BLACKMISC_EXPORT CMass operator ""_shortTon(long double);
BLACKMISC_EXPORT CMass operator ""_shortTon(unsigned long long);
//! @}
//! User-defined literal for pascal
//! @{
BLACKMISC_EXPORT CPressure operator ""_Pa(long double);
BLACKMISC_EXPORT CPressure operator ""_Pa(unsigned long long);
//! @}
//! User-defined literal for bar
//! @{
BLACKMISC_EXPORT CPressure operator ""_bar(long double);
BLACKMISC_EXPORT CPressure operator ""_bar(unsigned long long);
//! @}
//! User-defined literal for hectopascal
//! @{
BLACKMISC_EXPORT CPressure operator ""_hPa(long double);
BLACKMISC_EXPORT CPressure operator ""_hPa(unsigned long long);
//! @}
//! User-defined literal for pounds per square inch (psi)
//! @{
BLACKMISC_EXPORT CPressure operator ""_psi(long double);
BLACKMISC_EXPORT CPressure operator ""_psi(unsigned long long);
//! @}
//! User-defined literal for inch of mercury (inHg)
//! @{
BLACKMISC_EXPORT CPressure operator ""_inHg(long double);
BLACKMISC_EXPORT CPressure operator ""_inHg(unsigned long long);
//! @}
//! User-defined literal for milibar
//! @{
BLACKMISC_EXPORT CPressure operator ""_mbar(long double);
BLACKMISC_EXPORT CPressure operator ""_mbar(unsigned long long);
//! @}
//! User-defined literal for milimetre of mercury
//! @{
BLACKMISC_EXPORT CPressure operator ""_mmHg(long double);
BLACKMISC_EXPORT CPressure operator ""_mmHg(unsigned long long);
//! @}
//! User-defined literal for knots
//! @{
BLACKMISC_EXPORT CSpeed operator ""_kts(long double);
BLACKMISC_EXPORT CSpeed operator ""_kts(unsigned long long);
//! @}
//! User-defined literal for m/s
//! @{
BLACKMISC_EXPORT CSpeed operator ""_m_s(long double);
BLACKMISC_EXPORT CSpeed operator ""_m_s(unsigned long long);
//! @}
//! User-defined literal for NM/h
//! @{
BLACKMISC_EXPORT CSpeed operator ""_NM_h(long double);
BLACKMISC_EXPORT CSpeed operator ""_NM_h(unsigned long long);
//! @}
//! User-defined literal for ft/s
//! @{
BLACKMISC_EXPORT CSpeed operator ""_ft_s(long double);
BLACKMISC_EXPORT CSpeed operator ""_ft_s(unsigned long long);
//! @}
//! User-defined literal for km/h
//! @{
BLACKMISC_EXPORT CSpeed operator ""_km_h(long double);
BLACKMISC_EXPORT CSpeed operator ""_km_h(unsigned long long);
//! @}
//! User-defined literal for ft/min
//! @{
BLACKMISC_EXPORT CSpeed operator ""_ft_min(long double);
BLACKMISC_EXPORT CSpeed operator ""_ft_min(unsigned long long);
//! @}
//! User-defined literal for degrees Celsius
//! @{
BLACKMISC_EXPORT CTemperature operator ""_degC(long double);
BLACKMISC_EXPORT CTemperature operator ""_degC(unsigned long long);
//! @}
//! User-defined literal for degrees Fahrenheit
//! @{
BLACKMISC_EXPORT CTemperature operator ""_degF(long double);
BLACKMISC_EXPORT CTemperature operator ""_degF(unsigned long long);
//! @}
//! User-defined literal for degrees Kelvin
//! @{
BLACKMISC_EXPORT CTemperature operator ""_degK(long double);
BLACKMISC_EXPORT CTemperature operator ""_degK(unsigned long long);
//! @}
//! User-defined literal for days
//! @{
BLACKMISC_EXPORT CTime operator ""_d(long double);
BLACKMISC_EXPORT CTime operator ""_d(unsigned long long);
//! @}
//! User-defined literal for hours
//! @{
BLACKMISC_EXPORT CTime operator ""_h(long double);
BLACKMISC_EXPORT CTime operator ""_h(unsigned long long);
//! @}
//! User-defined literal for seconds
//! @{
BLACKMISC_EXPORT CTime operator ""_s(long double);
BLACKMISC_EXPORT CTime operator ""_s(unsigned long long);
//! @}
//! User-defined literal for miliseconds
//! @{
BLACKMISC_EXPORT CTime operator ""_ms(long double);
BLACKMISC_EXPORT CTime operator ""_ms(unsigned long long);
//! @}
//! User-defined literal for minutes
//! @{
BLACKMISC_EXPORT CTime operator ""_min(long double);
BLACKMISC_EXPORT CTime operator ""_min(unsigned long long);
//! @}
//! User-defined literal for hours/minutes/seconds
//! @{
BLACKMISC_EXPORT CTime operator ""_hms(long double);
BLACKMISC_EXPORT CTime operator ""_hms(unsigned long long);
//! @}
//! User-defined literal for hours/minutes
//! @{
BLACKMISC_EXPORT CTime operator ""_hrmin(long double);
BLACKMISC_EXPORT CTime operator ""_hrmin(unsigned long long);
//! @}
//! User-defined literal for minutes/seconds
//! @{
BLACKMISC_EXPORT CTime operator ""_minsec(long double);
BLACKMISC_EXPORT CTime operator ""_minsec(unsigned long long);
//! @}
}
}
}
#endif // BLACKMISC_PQ_LITERALS_H