//! \~\file piunits_prefix.h
//! \~\ingroup Units
//! \~\brief
//! \~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"
//! \~\ingroup Units
//! \~\brief
//! \~english Namespace containing unit prefix helpers.
//! \~russian Пространство имен со вспомогательными средствами префиксов единиц.
namespace PIUnits {
//! \~\ingroup Units
//! \~\brief
//! \~english Helpers for localized prefix names, symbols, and multipliers.
//! \~russian Вспомогательные методы для локализованных имен, обозначений и множителей префиксов.
class PIP_EXPORT Prefix {
friend class Value;
public:
//! \~english Supported SI prefixes.
//! \~russian Поддерживаемые префиксы СИ.
enum {
None /** \~english No prefix \~russian Без префикса */,
Deca = 0x100 /** \~english Deca prefix, 10^1 \~russian Префикс дека, 10^1 */,
Hecto /** \~english Hecto prefix, 10^2 \~russian Префикс гекто, 10^2 */,
Kilo /** \~english Kilo prefix, 10^3 \~russian Префикс кило, 10^3 */,
Mega /** \~english Mega prefix, 10^6 \~russian Префикс мега, 10^6 */,
Giga /** \~english Giga prefix, 10^9 \~russian Префикс гига, 10^9 */,
Tera /** \~english Tera prefix, 10^12 \~russian Префикс тера, 10^12 */,
Peta /** \~english Peta prefix, 10^15 \~russian Префикс пета, 10^15 */,
Exa /** \~english Exa prefix, 10^18 \~russian Префикс экса, 10^18 */,
Zetta /** \~english Zetta prefix, 10^21 \~russian Префикс зетта, 10^21 */,
Yotta /** \~english Yotta prefix, 10^24 \~russian Префикс йотта, 10^24 */,
Ronna /** \~english Ronna prefix, 10^27 \~russian Префикс ронна, 10^27 */,
Quetta /** \~english Quetta prefix, 10^30 \~russian Префикс кветта, 10^30 */,
Deci = 0x200 /** \~english Deci prefix, 10^-1 \~russian Префикс деци, 10^-1 */,
Centi /** \~english Centi prefix, 10^-2 \~russian Префикс санти, 10^-2 */,
Milli /** \~english Milli prefix, 10^-3 \~russian Префикс милли, 10^-3 */,
Micro /** \~english Micro prefix, 10^-6 \~russian Префикс микро, 10^-6 */,
Nano /** \~english Nano prefix, 10^-9 \~russian Префикс нано, 10^-9 */,
Pico /** \~english Pico prefix, 10^-12 \~russian Префикс пико, 10^-12 */,
Femto /** \~english Femto prefix, 10^-15 \~russian Префикс фемто, 10^-15 */,
Atto /** \~english Atto prefix, 10^-18 \~russian Префикс атто, 10^-18 */,
Zepto /** \~english Zepto prefix, 10^-21 \~russian Префикс зепто, 10^-21 */,
Yocto /** \~english Yocto prefix, 10^-24 \~russian Префикс йокто, 10^-24 */,
Ronto /** \~english Ronto prefix, 10^-27 \~russian Префикс ронто, 10^-27 */,
};
//! \~english Returns localized full name of prefix "prefix".
//! \~russian Возвращает локализованное полное имя префикса "prefix".
static PIString name(int prefix);
//! \~english Returns localized short symbol of prefix "prefix".
//! \~russian Возвращает локализованное короткое обозначение префикса "prefix".
static PIString prefix(int prefix);
//! \~english Returns numeric multiplier for prefix "prefix".
//! \~russian Возвращает числовой множитель префикса "prefix".
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);
struct P {
PIString name;
PIString prefix;
int pow;
double divider;
bool non3;
};
const P getPrefix(int p) const;
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