//! \~english Unit prefixes
//! \~russian Префиксы единиц измерения
/*
PIP - Platform Independent Primitives
Unit prefix
Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see .
*/
#ifndef PIUNITS_PREFIX_H
#define PIUNITS_PREFIX_H
#include "pistring.h"
namespace PIUnits {
//! \~english Unit prefix class
//! \~russian Класс префикса единиц
class PIP_EXPORT Prefix {
friend class Value;
public:
//! \~english Prefix values
//! \~russian Значения префиксов
enum {
None, //!< No prefix
Deca = 0x100, //!< da 10^1 10
Hecto, //!< h 10^2 100
Kilo, //!< k 10^3 1000
Mega, //!< M 10^6 1000000
Giga, //!< G 10^9 1000000000
Tera, //!< T 10^12 1000000000000
Peta, //!< P 10^15 1000000000000000
Exa, //!< E 10^18 1000000000000000000
Zetta, //!< Z 10^21 1000000000000000000000
Yotta, //!< Y 10^24 1000000000000000000000000
Ronna, //!< R 10^27 1000000000000000000000000000
Quetta, //!< Q 10^30 1000000000000000000000000000000
Deci = 0x200, //!< d 10^−1 0.1
Centi, //!< c 10^−2 0.01
Milli, //!< m 10^−3 0.001
Micro, //!< μ 10^−6 0.000001
Nano, //!< n 10^−9 0.000000001
Pico, //!< p 10^−12 0.000000000001
Femto, //!< f 10^−15 0.000000000000001
Atto, //!< a 10^−18 0.000000000000000001
Zepto, //!< z 10^−21 0.000000000000000000001
Yocto, //!< y 10^−24 0.000000000000000000000001
Ronto, //!< r 10^−27 0.000000000000000000000000001
};
//! \~english Get prefix name
//! \~russian Получить имя префикса
//! \param prefix Prefix value
//! \return Prefix name
static PIString name(int prefix);
//! \~english Get prefix symbol
//! \~russian Получить символ префикса
//! \param prefix Prefix value
//! \return Prefix symbol
static PIString prefix(int prefix);
//! \~english Get multiplier for prefix
//! \~russian Получить множитель для префикса
//! \param prefix Prefix value
//! \return Multiplier value
static double multiplier(int prefix);
private:
Prefix();
NO_COPY_CLASS(Prefix);
static Prefix & instance();
static PIString valueToString(double v, void * type_class, int type, char format = 'g', int prec = 5);
//! \~english Prefix data structure
//! \~russian Структура данных префикса
struct P {
PIString name;
PIString prefix;
int pow;
double divider;
bool non3;
};
//! \~english Get prefix by value
//! \~russian Получить префикс по значению
const P getPrefix(int p) const;
//! \~english Get prefix for value
//! \~russian Получить префикс для значения
const P getPrefixForValue(double v, bool use_non3, bool use_greater, bool use_smaller) const;
PIMap prefixes;
PIMap prefixes_by_pow;
P def_prefix;
};
} // namespace PIUnits
#endif