diff --git a/README.md b/README.md --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ * Acceleration * Angle * Area +* Binary Data * Currency * Density * Electrical Current diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,6 +27,7 @@ electrical_current.cpp electrical_resistance.cpp permeability.cpp + binary_data.cpp ) add_library(KF5UnitConversion ${kunitconversion_LIB_SRCS}) diff --git a/src/binary_data.cpp b/src/binary_data.cpp new file mode 100644 --- /dev/null +++ b/src/binary_data.cpp @@ -0,0 +1,365 @@ +/* + * Copyright (C) 2019 Jonathan Rubenstein + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, 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 General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#include "binary_data_p.h" +#include "unit_p.h" + +#include + +#include + +namespace KUnitConversion +{ + +class BinaryPowerOfTwoUnitPrivate : public UnitPrivate +{ +public: + BinaryPowerOfTwoUnitPrivate(CategoryId categoryId, UnitId id, qreal multiplier, + const QString &symbol, const QString &description, + const QString &matchString, const KLocalizedString &symbolString, + const KLocalizedString &realString, const KLocalizedString &integerString) + : UnitPrivate(categoryId, id, multiplier, + symbol, description, + matchString, symbolString, + realString, integerString) + {} + + qreal toDefault(qreal value) const override + { + return value * pow(2.0, m_multiplier); + } + qreal fromDefault(qreal value) const override + { + return value / pow(2.0, m_multiplier); + } +}; + +BinaryData::BinaryData() : CustomCategory(BinaryDataCategory, i18n("Binary Data"), i18n("Binary Data Size")) +{ + KLocalizedString symbolString = ki18nc("%1 value, %2 unit symbol (binary data)", "%1 %2"); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Yobibyte, 83, + i18nc("binary data unit symbol", "YiB"), + i18nc("unit description in lists", "yobibytes"), + i18nc("unit synonyms for matching user input", + "YiB;yobibyte;yobibytes"), + symbolString, + ki18nc("amount in units (real)", "%1 yobibytes"), + ki18ncp("amount in units (integer)", "%1 yobibyte", "%1 yobibytes")))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Yobibit, 80, + i18nc("binary data unit symbol", "Yib"), + i18nc("unit description in lists", "yobibits"), + i18nc("unit synonyms for matching user input", + "Yib;yobibit;yobibits"), + symbolString, + ki18nc("amount in units (real)", "%1 yobibits"), + ki18ncp("amount in units (integer)", "%1 yobibit", "%1 yobibits")))); + + addUnit(CustomUnit(BinaryDataCategory, Yottabyte, 8e+24, + i18nc("binary data unit symbol", "YB"), + i18nc("unit description in lists", "yottabytes"), + i18nc("unit synonyms for matching user input", + "YB;yottabyte;yottabytes"), + symbolString, + ki18nc("amount in units (real)", "%1 yottabytes"), + ki18ncp("amount in units (integer)", "%1 yottabyte", "%1 yottabytes"))); + + addUnit(CustomUnit(BinaryDataCategory, Yottabit, 1e+24, + i18nc("binary data unit symbol", "Yb"), + i18nc("unit description in lists", "yottabits"), + i18nc("unit synonyms for matching user input", + "Yb;yottabit;yottabits"), + symbolString, + ki18nc("amount in units (real)", "%1 yottabits"), + ki18ncp("amount in units (integer)", "%1 yottabit", "%1 yottabits"))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Zebibyte, 73, + i18nc("binary data unit symbol", "ZiB"), + i18nc("unit description in lists", "zebibytes"), + i18nc("unit synonyms for matching user input", + "ZiB;zebibyte;zebibytes"), + symbolString, + ki18nc("amount in units (real)", "%1 zebibytes"), + ki18ncp("amount in units (integer)", "%1 zebibyte", "%1 zebibytes")))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Zebibit, 70, + i18nc("binary data unit symbol", "Zib"), + i18nc("unit description in lists", "zebibits"), + i18nc("unit synonyms for matching user input", + "Zib;zebibit;zebibits"), + symbolString, + ki18nc("amount in units (real)", "%1 zebibits"), + ki18ncp("amount in units (integer)", "%1 zebibit", "%1 zebibits")))); + + addUnit(CustomUnit(BinaryDataCategory, Zettabyte, 8e+21, + i18nc("binary data unit symbol", "ZB"), + i18nc("unit description in lists", "zettabytes"), + i18nc("unit synonyms for matching user input", + "ZB;zettabyte;zettabytes"), + symbolString, + ki18nc("amount in units (real)", "%1 zettabytes"), + ki18ncp("amount in units (integer)", "%1 zettabyte", "%1 zettabytes"))); + + addUnit(CustomUnit(BinaryDataCategory, Zettabit, 1e+21, + i18nc("binary data unit symbol", "Zb"), + i18nc("unit description in lists", "zettabits"), + i18nc("unit synonyms for matching user input", + "Zb;zettabit;zettabits"), + symbolString, + ki18nc("amount in units (real)", "%1 zettabits"), + ki18ncp("amount in units (integer)", "%1 zettabit", "%1 zettabits"))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Exbibyte, 63, + i18nc("binary data unit symbol", "EiB"), + i18nc("unit description in lists", "exbibytes"), + i18nc("unit synonyms for matching user input", + "EiB;exbibyte;exbibytes"), + symbolString, + ki18nc("amount in units (real)", "%1 exbibytes"), + ki18ncp("amount in units (integer)", "%1 exbibyte", "%1 exbibytes")))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Exbibit, 60, + i18nc("binary data unit symbol", "Eib"), + i18nc("unit description in lists", "exbibits"), + i18nc("unit synonyms for matching user input", + "Eib;exbibit;exbibits"), + symbolString, + ki18nc("amount in units (real)", "%1 exbibits"), + ki18ncp("amount in units (integer)", "%1 exbibit", "%1 exbibits")))); + + addUnit(CustomUnit(BinaryDataCategory, Exabyte, 8e+18, + i18nc("binary data unit symbol", "EB"), + i18nc("unit description in lists", "exabytes"), + i18nc("unit synonyms for matching user input", + "EB;exabyte;exabytes"), + symbolString, + ki18nc("amount in units (real)", "%1 exabytes"), + ki18ncp("amount in units (integer)", "%1 exabyte", "%1 exabytes"))); + + addUnit(CustomUnit(BinaryDataCategory, Exabit, 1e+18, + i18nc("binary data unit symbol", "Eb"), + i18nc("unit description in lists", "exabits"), + i18nc("unit synonyms for matching user input", + "Eb;exabit;exabits"), + symbolString, + ki18nc("amount in units (real)", "%1 exabits"), + ki18ncp("amount in units (integer)", "%1 exabit", "%1 exabits"))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Pebibyte, 53, + i18nc("binary data unit symbol", "PiB"), + i18nc("unit description in lists", "pebibytes"), + i18nc("unit synonyms for matching user input", + "PiB;pebibyte;pebibytes"), + symbolString, + ki18nc("amount in units (real)", "%1 pebibytes"), + ki18ncp("amount in units (integer)", "%1 pebibyte", "%1 pebibytes")))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Pebibit, 50, + i18nc("binary data unit symbol", "Pib"), + i18nc("unit description in lists", "pebibits"), + i18nc("unit synonyms for matching user input", + "Pib;pebibit;pebibits"), + symbolString, + ki18nc("amount in units (real)", "%1 pebibits"), + ki18ncp("amount in units (integer)", "%1 pebibit", "%1 pebibits")))); + + addUnit(CustomUnit(BinaryDataCategory, Petabyte, 8e+15, + i18nc("binary data unit symbol", "PB"), + i18nc("unit description in lists", "petabytes"), + i18nc("unit synonyms for matching user input", + "PB;petabyte;petabytes"), + symbolString, + ki18nc("amount in units (real)", "%1 petabytes"), + ki18ncp("amount in units (integer)", "%1 petabyte", "%1 petabytes"))); + + addUnit(CustomUnit(BinaryDataCategory, Petabit, 1e+15, + i18nc("binary data unit symbol", "Tb"), + i18nc("unit description in lists", "petabits"), + i18nc("unit synonyms for matching user input", + "Tb;petabit;petabits"), + symbolString, + ki18nc("amount in units (real)", "%1 petabits"), + ki18ncp("amount in units (integer)", "%1 petabit", "%1 petabits"))); + + addCommonUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Tebibyte, 43, + i18nc("binary data unit symbol", "TiB"), + i18nc("unit description in lists", "tebibytes"), + i18nc("unit synonyms for matching user input", + "TiB;tebibyte;tebibytes"), + symbolString, + ki18nc("amount in units (real)", "%1 tebibytes"), + ki18ncp("amount in units (integer)", "%1 tebibyte", "%1 tebibytes")))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Tebibit, 40, + i18nc("binary data unit symbol", "Tib"), + i18nc("unit description in lists", "tebibits"), + i18nc("unit synonyms for matching user input", + "Tib;tebibit;tebibits"), + symbolString, + ki18nc("amount in units (real)", "%1 tebibits"), + ki18ncp("amount in units (integer)", "%1 tebibit", "%1 tebibits")))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Terabyte, 8e+12, + i18nc("binary data unit symbol", "TB"), + i18nc("unit description in lists", "terabytes"), + i18nc("unit synonyms for matching user input", + "TB;terabyte;terabytes"), + symbolString, + ki18nc("amount in units (real)", "%1 terabytes"), + ki18ncp("amount in units (integer)", "%1 terabyte", "%1 terabytes"))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Terabit, 1e+12, + i18nc("binary data unit symbol", "Tb"), + i18nc("unit description in lists", "terabits"), + i18nc("unit synonyms for matching user input", + "Tb;terabit;terabits"), + symbolString, + ki18nc("amount in units (real)", "%1 terabits"), + ki18ncp("amount in units (integer)", "%1 terabit", "%1 terabits"))); + + addCommonUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Gibibyte, 33, + i18nc("binary data unit symbol", "GiB"), + i18nc("unit description in lists", "gibibytes"), + i18nc("unit synonyms for matching user input", + "GiB;gibibyte;gibibytes"), + symbolString, + ki18nc("amount in units (real)", "%1 gibibytes"), + ki18ncp("amount in units (integer)", "%1 gibibyte", "%1 gibibytes")))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Gibibit, 30, + i18nc("binary data unit symbol", "Gib"), + i18nc("unit description in lists", "gibibits"), + i18nc("unit synonyms for matching user input", + "Gib;gibibit;gibibits"), + symbolString, + ki18nc("amount in units (real)", "%1 gibibits"), + ki18ncp("amount in units (integer)", "%1 gibibit", "%1 gibibits")))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Gigabyte, 8e+09, + i18nc("binary data unit symbol", "GB"), + i18nc("unit description in lists", "gigabytes"), + i18nc("unit synonyms for matching user input", + "GB;gigabyte;gigabytes"), + symbolString, + ki18nc("amount in units (real)", "%1 gigabytes"), + ki18ncp("amount in units (integer)", "%1 gigabyte", "%1 gigabytes"))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Gigabit, 1e+09, + i18nc("binary data unit symbol", "Gb"), + i18nc("unit description in lists", "gigabits"), + i18nc("unit synonyms for matching user input", + "Gb;gigabit;gigabits"), + symbolString, + ki18nc("amount in units (real)", "%1 gigabits"), + ki18ncp("amount in units (integer)", "%1 gigabit", "%1 gigabits"))); + + addCommonUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Mebibyte, 23, + i18nc("binary data unit symbol", "MiB"), + i18nc("unit description in lists", "mebibytes"), + i18nc("unit synonyms for matching user input", + "MiB;mebibyte;mebibytes"), + symbolString, + ki18nc("amount in units (real)", "%1 mebibytes"), + ki18ncp("amount in units (integer)", "%1 mebibyte", "%1 mebibytes")))); + + addUnit(CustomUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, Mebibit, 20, + i18nc("binary data unit symbol", "Mib"), + i18nc("unit description in lists", "mebibits"), + i18nc("unit synonyms for matching user input", + "Mib;mebibit;mebibits"), + symbolString, + ki18nc("amount in units (real)", "%1 mebibits"), + ki18ncp("amount in units (integer)", "%1 mebibit", "%1 mebibits")))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Megabyte, 8e+06, + i18nc("binary data unit symbol", "MB"), + i18nc("unit description in lists", "megabytes"), + i18nc("unit synonyms for matching user input", + "MB;megabyte;megabytes"), + symbolString, + ki18nc("amount in units (real)", "%1 megabytes"), + ki18ncp("amount in units (integer)", "%1 megabyte", "%1 megabytes"))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Megabit, 1e+06, + i18nc("binary data unit symbol", "Mb"), + i18nc("unit description in lists", "megabits"), + i18nc("unit synonyms for matching user input", + "Mb;megabit;megabits"), + symbolString, + ki18nc("amount in units (real)", "%1 megabits"), + ki18ncp("amount in units (integer)", "%1 megabit", "%1 megabits"))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Kibibyte, 8192, + i18nc("binary data unit symbol", "KiB"), + i18nc("unit description in lists", "kibibytes"), + i18nc("unit synonyms for matching user input", + "KiB;kibibyte;kibibytes"), + symbolString, + ki18nc("amount in units (real)", "%1 kibibytes"), + ki18ncp("amount in units (integer)", "%1 kibibyte", "%1 kibibytes"))); + + addUnit(CustomUnit(BinaryDataCategory, Kibibit, 1024, + i18nc("binary data unit symbol", "Kib"), + i18nc("unit description in lists", "kibibits"), + i18nc("unit synonyms for matching user input", + "Kib;kibibit;kibibits"), + symbolString, + ki18nc("amount in units (real)", "%1 kibibits"), + ki18ncp("amount in units (integer)", "%1 kibibit", "%1 kibibits"))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Kilobyte, 8000, + i18nc("binary data unit symbol", "kB"), + i18nc("unit description in lists", "kilobytes"), + i18nc("unit synonyms for matching user input", + "kB;kilobyte;kilobytes"), + symbolString, + ki18nc("amount in units (real)", "%1 kilobytes"), + ki18ncp("amount in units (integer)", "%1 kilobyte", "%1 kilobytes"))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Kilobit, 1000, + i18nc("binary data unit symbol", "kb"), + i18nc("unit description in lists", "kilobits"), + i18nc("unit synonyms for matching user input", + "kb;kilobit;kilobits"), + symbolString, + ki18nc("amount in units (real)", "%1 kilobits"), + ki18ncp("amount in units (integer)", "%1 kilobit", "%1 kilobits"))); + + addCommonUnit(CustomUnit(BinaryDataCategory, Byte, 8, + i18nc("binary data unit symbol", "B"), + i18nc("unit description in lists", "bytes"), + i18nc("unit synonyms for matching user input", + "B;byte;bytes"), + symbolString, + ki18nc("amount in units (real)", "%1 bytes"), + ki18ncp("amount in units (integer)", "%1 byte", "%1 bytes"))); + + addDefaultUnit(CustomUnit(BinaryDataCategory, Bit, 1, + i18nc("binary data unit symbol", "b"), + i18nc("unit description in lists", "bits"), + i18nc("unit synonyms for matching user input", + "b;bit;bits"), + symbolString, + ki18nc("amount in units (real)", "%1 bits"), + ki18ncp("amount in units (integer)", "%1 bit", "%1 bits"))); +} + +} // KUnitConversion namespace diff --git a/src/binary_data_p.h b/src/binary_data_p.h new file mode 100644 --- /dev/null +++ b/src/binary_data_p.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 Jonathan Rubenstein + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, 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 General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef BINARY_DATA_P_H +#define BINARY_DATA_P_H + +#include "unitcategory_p.h" + +namespace KUnitConversion +{ + +class BinaryData : public CustomCategory +{ +public: + BinaryData(); +}; + +} // KUnitConversion namespace + +#endif diff --git a/src/converter.cpp b/src/converter.cpp --- a/src/converter.cpp +++ b/src/converter.cpp @@ -23,6 +23,7 @@ #include "acceleration_p.h" #include "angle_p.h" #include "area_p.h" +#include "binary_data_p.h" #include "currency_p.h" #include "density_p.h" #include "electrical_current_p.h" @@ -79,6 +80,7 @@ m_categories[ElectricalCurrentCategory] = ElectricalCurrent(); m_categories[ElectricalResistanceCategory] = ElectricalResistance(); m_categories[PermeabilityCategory] = Permeability(); + m_categories[BinaryDataCategory] = BinaryData(); } virtual ~ConverterPrivate() diff --git a/src/unit.h b/src/unit.h --- a/src/unit.h +++ b/src/unit.h @@ -63,7 +63,9 @@ /** @since 5.27 */ ElectricalResistanceCategory, /** @since 5.53 */ - PermeabilityCategory + PermeabilityCategory, + /** @since 5.61 **/ + BinaryDataCategory }; enum UnitId { @@ -336,7 +338,76 @@ /** @since 5.53 */ MiliDarcy, /** @since 5.53 */ - PermeabilitySquareMicrometer + PermeabilitySquareMicrometer, + + /** @since 5.61 */ + Yobibyte = 34000, + /** @since 5.61 */ + Yobibit, + /** @since 5.61 */ + Yottabyte, + /** @since 5.61 */ + Yottabit, + /** @since 5.61 */ + Zebibyte, + /** @since 5.61 */ + Zebibit, + /** @since 5.61 */ + Zettabyte, + /** @since 5.61 */ + Zettabit, + /** @since 5.61 */ + Exbibyte, + /** @since 5.61 */ + Exbibit, + /** @since 5.61 */ + Exabyte, + /** @since 5.61 */ + Exabit, + /** @since 5.61 */ + Pebibyte, + /** @since 5.61 */ + Pebibit, + /** @since 5.61 */ + Petabyte, + /** @since 5.61 */ + Petabit, + /** @since 5.61 */ + Tebibyte, + /** @since 5.61 */ + Tebibit, + /** @since 5.61 */ + Terabyte, + /** @since 5.61 */ + Terabit, + /** @since 5.61 */ + Gibibyte, + /** @since 5.61 */ + Gibibit, + /** @since 5.61 */ + Gigabyte, + /** @since 5.61 */ + Gigabit, + /** @since 5.61 */ + Mebibyte, + /** @since 5.61 */ + Mebibit, + /** @since 5.61 */ + Megabyte, + /** @since 5.61 */ + Megabit, + /** @since 5.61 */ + Kibibyte, + /** @since 5.61 */ + Kibibit, + /** @since 5.61 */ + Kilobyte, + /** @since 5.61 */ + Kilobit, + /** @since 5.61 */ + Byte, + /** @since 5.61 */ + Bit }; class UnitCategory;