1 /* 2 * Copyright (C) 2005-2018 Team Kodi 3 * This file is part of Kodi - https://kodi.tv 4 * 5 * SPDX-License-Identifier: GPL-2.0-or-later 6 * See LICENSES/README.md for more information. 7 */ 8 9 #pragma once 10 11 #include "utils/IArchivable.h" 12 13 #include <string> 14 15 class CTemperature : public IArchivable 16 { 17 public: 18 CTemperature(); 19 CTemperature(const CTemperature& temperature); 20 21 typedef enum Unit 22 { 23 UnitFahrenheit = 0, 24 UnitKelvin, 25 UnitCelsius, 26 UnitReaumur, 27 UnitRankine, 28 UnitRomer, 29 UnitDelisle, 30 UnitNewton 31 } Unit; 32 33 static CTemperature CreateFromFahrenheit(double value); 34 static CTemperature CreateFromKelvin(double value); 35 static CTemperature CreateFromCelsius(double value); 36 static CTemperature CreateFromReaumur(double value); 37 static CTemperature CreateFromRankine(double value); 38 static CTemperature CreateFromRomer(double value); 39 static CTemperature CreateFromDelisle(double value); 40 static CTemperature CreateFromNewton(double value); 41 42 bool operator >(const CTemperature& right) const; 43 bool operator >=(const CTemperature& right) const; 44 bool operator <(const CTemperature& right) const; 45 bool operator <=(const CTemperature& right) const; 46 bool operator ==(const CTemperature& right) const; 47 bool operator !=(const CTemperature& right) const; 48 49 CTemperature& operator =(const CTemperature& right); 50 const CTemperature& operator +=(const CTemperature& right); 51 const CTemperature& operator -=(const CTemperature& right); 52 const CTemperature& operator *=(const CTemperature& right); 53 const CTemperature& operator /=(const CTemperature& right); 54 CTemperature operator +(const CTemperature& right) const; 55 CTemperature operator -(const CTemperature& right) const; 56 CTemperature operator *(const CTemperature& right) const; 57 CTemperature operator /(const CTemperature& right) const; 58 59 bool operator >(double right) const; 60 bool operator >=(double right) const; 61 bool operator <(double right) const; 62 bool operator <=(double right) const; 63 bool operator ==(double right) const; 64 bool operator !=(double right) const; 65 66 const CTemperature& operator +=(double right); 67 const CTemperature& operator -=(double right); 68 const CTemperature& operator *=(double right); 69 const CTemperature& operator /=(double right); 70 CTemperature operator +(double right) const; 71 CTemperature operator -(double right) const; 72 CTemperature operator *(double right) const; 73 CTemperature operator /(double right) const; 74 75 CTemperature& operator ++(); 76 CTemperature& operator --(); 77 CTemperature operator ++(int); 78 CTemperature operator --(int); 79 80 void Archive(CArchive& ar) override; 81 82 bool IsValid() const; SetValid(bool valid)83 void SetValid(bool valid) { m_valid = valid; } 84 85 double ToFahrenheit() const; 86 double ToKelvin() const; 87 double ToCelsius() const; 88 double ToReaumur() const; 89 double ToRankine() const; 90 double ToRomer() const; 91 double ToDelisle() const; 92 double ToNewton() const; 93 94 double To(Unit temperatureUnit) const; 95 std::string ToString(Unit temperatureUnit) const; 96 97 protected: 98 explicit CTemperature(double value); 99 100 double m_value; // we store as fahrenheit 101 bool m_valid; 102 }; 103 104