File indexing completed on 2024-04-28 07:47:31
0001 /* 0002 * SPDX-FileCopyrightText: 2019 Jonathan Rubenstein <jrubcop@gmail.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "binary_data_p.h" 0008 #include "unit_p.h" 0009 0010 #include <KLocalizedString> 0011 0012 #include <math.h> 0013 0014 namespace KUnitConversion 0015 { 0016 class BinaryPowerOfTwoUnitPrivate : public UnitPrivate 0017 { 0018 public: 0019 BinaryPowerOfTwoUnitPrivate(CategoryId categoryId, 0020 UnitId id, 0021 qreal multiplier, 0022 const QString &symbol, 0023 const QString &description, 0024 const QString &matchString, 0025 const KLocalizedString &symbolString, 0026 const KLocalizedString &realString, 0027 const KLocalizedString &integerString) 0028 : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString) 0029 { 0030 } 0031 0032 qreal toDefault(qreal value) const override 0033 { 0034 return value * pow(2.0, m_multiplier); 0035 } 0036 qreal fromDefault(qreal value) const override 0037 { 0038 return value / pow(2.0, m_multiplier); 0039 } 0040 }; 0041 0042 UnitCategory BinaryData::makeCategory() 0043 { 0044 auto c = UnitCategoryPrivate::makeCategory(BinaryDataCategory, i18n("Binary Data"), i18n("Binary Data Size")); 0045 auto d = UnitCategoryPrivate::get(c); 0046 KLocalizedString symbolString = ki18nc("%1 value, %2 unit symbol (binary data)", "%1 %2"); 0047 0048 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0049 Yobibyte, 0050 83, 0051 i18nc("binary data unit symbol", "YiB"), 0052 i18nc("unit description in lists", "yobibytes"), 0053 i18nc("unit synonyms for matching user input", "YiB;yobibyte;yobibytes"), 0054 symbolString, 0055 ki18nc("amount in units (real)", "%1 yobibytes"), 0056 ki18ncp("amount in units (integer)", "%1 yobibyte", "%1 yobibytes")))); 0057 0058 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0059 Yobibit, 0060 80, 0061 i18nc("binary data unit symbol", "Yib"), 0062 i18nc("unit description in lists", "yobibits"), 0063 i18nc("unit synonyms for matching user input", "Yib;yobibit;yobibits"), 0064 symbolString, 0065 ki18nc("amount in units (real)", "%1 yobibits"), 0066 ki18ncp("amount in units (integer)", "%1 yobibit", "%1 yobibits")))); 0067 0068 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0069 Yottabyte, 0070 8e+24, 0071 i18nc("binary data unit symbol", "YB"), 0072 i18nc("unit description in lists", "yottabytes"), 0073 i18nc("unit synonyms for matching user input", "YB;yottabyte;yottabytes"), 0074 symbolString, 0075 ki18nc("amount in units (real)", "%1 yottabytes"), 0076 ki18ncp("amount in units (integer)", "%1 yottabyte", "%1 yottabytes"))); 0077 0078 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0079 Yottabit, 0080 1e+24, 0081 i18nc("binary data unit symbol", "Yb"), 0082 i18nc("unit description in lists", "yottabits"), 0083 i18nc("unit synonyms for matching user input", "Yb;yottabit;yottabits"), 0084 symbolString, 0085 ki18nc("amount in units (real)", "%1 yottabits"), 0086 ki18ncp("amount in units (integer)", "%1 yottabit", "%1 yottabits"))); 0087 0088 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0089 Zebibyte, 0090 73, 0091 i18nc("binary data unit symbol", "ZiB"), 0092 i18nc("unit description in lists", "zebibytes"), 0093 i18nc("unit synonyms for matching user input", "ZiB;zebibyte;zebibytes"), 0094 symbolString, 0095 ki18nc("amount in units (real)", "%1 zebibytes"), 0096 ki18ncp("amount in units (integer)", "%1 zebibyte", "%1 zebibytes")))); 0097 0098 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0099 Zebibit, 0100 70, 0101 i18nc("binary data unit symbol", "Zib"), 0102 i18nc("unit description in lists", "zebibits"), 0103 i18nc("unit synonyms for matching user input", "Zib;zebibit;zebibits"), 0104 symbolString, 0105 ki18nc("amount in units (real)", "%1 zebibits"), 0106 ki18ncp("amount in units (integer)", "%1 zebibit", "%1 zebibits")))); 0107 0108 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0109 Zettabyte, 0110 8e+21, 0111 i18nc("binary data unit symbol", "ZB"), 0112 i18nc("unit description in lists", "zettabytes"), 0113 i18nc("unit synonyms for matching user input", "ZB;zettabyte;zettabytes"), 0114 symbolString, 0115 ki18nc("amount in units (real)", "%1 zettabytes"), 0116 ki18ncp("amount in units (integer)", "%1 zettabyte", "%1 zettabytes"))); 0117 0118 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0119 Zettabit, 0120 1e+21, 0121 i18nc("binary data unit symbol", "Zb"), 0122 i18nc("unit description in lists", "zettabits"), 0123 i18nc("unit synonyms for matching user input", "Zb;zettabit;zettabits"), 0124 symbolString, 0125 ki18nc("amount in units (real)", "%1 zettabits"), 0126 ki18ncp("amount in units (integer)", "%1 zettabit", "%1 zettabits"))); 0127 0128 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0129 Exbibyte, 0130 63, 0131 i18nc("binary data unit symbol", "EiB"), 0132 i18nc("unit description in lists", "exbibytes"), 0133 i18nc("unit synonyms for matching user input", "EiB;exbibyte;exbibytes"), 0134 symbolString, 0135 ki18nc("amount in units (real)", "%1 exbibytes"), 0136 ki18ncp("amount in units (integer)", "%1 exbibyte", "%1 exbibytes")))); 0137 0138 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0139 Exbibit, 0140 60, 0141 i18nc("binary data unit symbol", "Eib"), 0142 i18nc("unit description in lists", "exbibits"), 0143 i18nc("unit synonyms for matching user input", "Eib;exbibit;exbibits"), 0144 symbolString, 0145 ki18nc("amount in units (real)", "%1 exbibits"), 0146 ki18ncp("amount in units (integer)", "%1 exbibit", "%1 exbibits")))); 0147 0148 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0149 Exabyte, 0150 8e+18, 0151 i18nc("binary data unit symbol", "EB"), 0152 i18nc("unit description in lists", "exabytes"), 0153 i18nc("unit synonyms for matching user input", "EB;exabyte;exabytes"), 0154 symbolString, 0155 ki18nc("amount in units (real)", "%1 exabytes"), 0156 ki18ncp("amount in units (integer)", "%1 exabyte", "%1 exabytes"))); 0157 0158 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0159 Exabit, 0160 1e+18, 0161 i18nc("binary data unit symbol", "Eb"), 0162 i18nc("unit description in lists", "exabits"), 0163 i18nc("unit synonyms for matching user input", "Eb;exabit;exabits"), 0164 symbolString, 0165 ki18nc("amount in units (real)", "%1 exabits"), 0166 ki18ncp("amount in units (integer)", "%1 exabit", "%1 exabits"))); 0167 0168 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0169 Pebibyte, 0170 53, 0171 i18nc("binary data unit symbol", "PiB"), 0172 i18nc("unit description in lists", "pebibytes"), 0173 i18nc("unit synonyms for matching user input", "PiB;pebibyte;pebibytes"), 0174 symbolString, 0175 ki18nc("amount in units (real)", "%1 pebibytes"), 0176 ki18ncp("amount in units (integer)", "%1 pebibyte", "%1 pebibytes")))); 0177 0178 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0179 Pebibit, 0180 50, 0181 i18nc("binary data unit symbol", "Pib"), 0182 i18nc("unit description in lists", "pebibits"), 0183 i18nc("unit synonyms for matching user input", "Pib;pebibit;pebibits"), 0184 symbolString, 0185 ki18nc("amount in units (real)", "%1 pebibits"), 0186 ki18ncp("amount in units (integer)", "%1 pebibit", "%1 pebibits")))); 0187 0188 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0189 Petabyte, 0190 8e+15, 0191 i18nc("binary data unit symbol", "PB"), 0192 i18nc("unit description in lists", "petabytes"), 0193 i18nc("unit synonyms for matching user input", "PB;petabyte;petabytes"), 0194 symbolString, 0195 ki18nc("amount in units (real)", "%1 petabytes"), 0196 ki18ncp("amount in units (integer)", "%1 petabyte", "%1 petabytes"))); 0197 0198 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0199 Petabit, 0200 1e+15, 0201 i18nc("binary data unit symbol", "Pb"), 0202 i18nc("unit description in lists", "petabits"), 0203 i18nc("unit synonyms for matching user input", "Pb;petabit;petabits"), 0204 symbolString, 0205 ki18nc("amount in units (real)", "%1 petabits"), 0206 ki18ncp("amount in units (integer)", "%1 petabit", "%1 petabits"))); 0207 0208 d->addCommonUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0209 Tebibyte, 0210 43, 0211 i18nc("binary data unit symbol", "TiB"), 0212 i18nc("unit description in lists", "tebibytes"), 0213 i18nc("unit synonyms for matching user input", "TiB;tebibyte;tebibytes"), 0214 symbolString, 0215 ki18nc("amount in units (real)", "%1 tebibytes"), 0216 ki18ncp("amount in units (integer)", "%1 tebibyte", "%1 tebibytes")))); 0217 0218 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0219 Tebibit, 0220 40, 0221 i18nc("binary data unit symbol", "Tib"), 0222 i18nc("unit description in lists", "tebibits"), 0223 i18nc("unit synonyms for matching user input", "Tib;tebibit;tebibits"), 0224 symbolString, 0225 ki18nc("amount in units (real)", "%1 tebibits"), 0226 ki18ncp("amount in units (integer)", "%1 tebibit", "%1 tebibits")))); 0227 0228 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0229 Terabyte, 0230 8e+12, 0231 i18nc("binary data unit symbol", "TB"), 0232 i18nc("unit description in lists", "terabytes"), 0233 i18nc("unit synonyms for matching user input", "TB;terabyte;terabytes"), 0234 symbolString, 0235 ki18nc("amount in units (real)", "%1 terabytes"), 0236 ki18ncp("amount in units (integer)", "%1 terabyte", "%1 terabytes"))); 0237 0238 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0239 Terabit, 0240 1e+12, 0241 i18nc("binary data unit symbol", "Tb"), 0242 i18nc("unit description in lists", "terabits"), 0243 i18nc("unit synonyms for matching user input", "Tb;terabit;terabits"), 0244 symbolString, 0245 ki18nc("amount in units (real)", "%1 terabits"), 0246 ki18ncp("amount in units (integer)", "%1 terabit", "%1 terabits"))); 0247 0248 d->addCommonUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0249 Gibibyte, 0250 33, 0251 i18nc("binary data unit symbol", "GiB"), 0252 i18nc("unit description in lists", "gibibytes"), 0253 i18nc("unit synonyms for matching user input", "GiB;gibibyte;gibibytes"), 0254 symbolString, 0255 ki18nc("amount in units (real)", "%1 gibibytes"), 0256 ki18ncp("amount in units (integer)", "%1 gibibyte", "%1 gibibytes")))); 0257 0258 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0259 Gibibit, 0260 30, 0261 i18nc("binary data unit symbol", "Gib"), 0262 i18nc("unit description in lists", "gibibits"), 0263 i18nc("unit synonyms for matching user input", "Gib;gibibit;gibibits"), 0264 symbolString, 0265 ki18nc("amount in units (real)", "%1 gibibits"), 0266 ki18ncp("amount in units (integer)", "%1 gibibit", "%1 gibibits")))); 0267 0268 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0269 Gigabyte, 0270 8e+09, 0271 i18nc("binary data unit symbol", "GB"), 0272 i18nc("unit description in lists", "gigabytes"), 0273 i18nc("unit synonyms for matching user input", "GB;gigabyte;gigabytes"), 0274 symbolString, 0275 ki18nc("amount in units (real)", "%1 gigabytes"), 0276 ki18ncp("amount in units (integer)", "%1 gigabyte", "%1 gigabytes"))); 0277 0278 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0279 Gigabit, 0280 1e+09, 0281 i18nc("binary data unit symbol", "Gb"), 0282 i18nc("unit description in lists", "gigabits"), 0283 i18nc("unit synonyms for matching user input", "Gb;gigabit;gigabits"), 0284 symbolString, 0285 ki18nc("amount in units (real)", "%1 gigabits"), 0286 ki18ncp("amount in units (integer)", "%1 gigabit", "%1 gigabits"))); 0287 0288 d->addCommonUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0289 Mebibyte, 0290 23, 0291 i18nc("binary data unit symbol", "MiB"), 0292 i18nc("unit description in lists", "mebibytes"), 0293 i18nc("unit synonyms for matching user input", "MiB;mebibyte;mebibytes"), 0294 symbolString, 0295 ki18nc("amount in units (real)", "%1 mebibytes"), 0296 ki18ncp("amount in units (integer)", "%1 mebibyte", "%1 mebibytes")))); 0297 0298 d->addUnit(UnitPrivate::makeUnit(new BinaryPowerOfTwoUnitPrivate(BinaryDataCategory, 0299 Mebibit, 0300 20, 0301 i18nc("binary data unit symbol", "Mib"), 0302 i18nc("unit description in lists", "mebibits"), 0303 i18nc("unit synonyms for matching user input", "Mib;mebibit;mebibits"), 0304 symbolString, 0305 ki18nc("amount in units (real)", "%1 mebibits"), 0306 ki18ncp("amount in units (integer)", "%1 mebibit", "%1 mebibits")))); 0307 0308 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0309 Megabyte, 0310 8e+06, 0311 i18nc("binary data unit symbol", "MB"), 0312 i18nc("unit description in lists", "megabytes"), 0313 i18nc("unit synonyms for matching user input", "MB;megabyte;megabytes"), 0314 symbolString, 0315 ki18nc("amount in units (real)", "%1 megabytes"), 0316 ki18ncp("amount in units (integer)", "%1 megabyte", "%1 megabytes"))); 0317 0318 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0319 Megabit, 0320 1e+06, 0321 i18nc("binary data unit symbol", "Mb"), 0322 i18nc("unit description in lists", "megabits"), 0323 i18nc("unit synonyms for matching user input", "Mb;megabit;megabits"), 0324 symbolString, 0325 ki18nc("amount in units (real)", "%1 megabits"), 0326 ki18ncp("amount in units (integer)", "%1 megabit", "%1 megabits"))); 0327 0328 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0329 Kibibyte, 0330 8192, 0331 i18nc("binary data unit symbol", "KiB"), 0332 i18nc("unit description in lists", "kibibytes"), 0333 i18nc("unit synonyms for matching user input", "KiB;kibibyte;kibibytes"), 0334 symbolString, 0335 ki18nc("amount in units (real)", "%1 kibibytes"), 0336 ki18ncp("amount in units (integer)", "%1 kibibyte", "%1 kibibytes"))); 0337 0338 d->addUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0339 Kibibit, 0340 1024, 0341 i18nc("binary data unit symbol", "Kib"), 0342 i18nc("unit description in lists", "kibibits"), 0343 i18nc("unit synonyms for matching user input", "Kib;kibibit;kibibits"), 0344 symbolString, 0345 ki18nc("amount in units (real)", "%1 kibibits"), 0346 ki18ncp("amount in units (integer)", "%1 kibibit", "%1 kibibits"))); 0347 0348 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0349 Kilobyte, 0350 8000, 0351 i18nc("binary data unit symbol", "kB"), 0352 i18nc("unit description in lists", "kilobytes"), 0353 i18nc("unit synonyms for matching user input", "kB;kilobyte;kilobytes"), 0354 symbolString, 0355 ki18nc("amount in units (real)", "%1 kilobytes"), 0356 ki18ncp("amount in units (integer)", "%1 kilobyte", "%1 kilobytes"))); 0357 0358 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0359 Kilobit, 0360 1000, 0361 i18nc("binary data unit symbol", "kb"), 0362 i18nc("unit description in lists", "kilobits"), 0363 i18nc("unit synonyms for matching user input", "kb;kilobit;kilobits"), 0364 symbolString, 0365 ki18nc("amount in units (real)", "%1 kilobits"), 0366 ki18ncp("amount in units (integer)", "%1 kilobit", "%1 kilobits"))); 0367 0368 d->addCommonUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0369 Byte, 0370 8, 0371 i18nc("binary data unit symbol", "B"), 0372 i18nc("unit description in lists", "bytes"), 0373 i18nc("unit synonyms for matching user input", "B;byte;bytes"), 0374 symbolString, 0375 ki18nc("amount in units (real)", "%1 bytes"), 0376 ki18ncp("amount in units (integer)", "%1 byte", "%1 bytes"))); 0377 0378 d->addDefaultUnit(UnitPrivate::makeUnit(BinaryDataCategory, 0379 Bit, 0380 1, 0381 i18nc("binary data unit symbol", "b"), 0382 i18nc("unit description in lists", "bits"), 0383 i18nc("unit synonyms for matching user input", "b;bit;bits"), 0384 symbolString, 0385 ki18nc("amount in units (real)", "%1 bits"), 0386 ki18ncp("amount in units (integer)", "%1 bit", "%1 bits"))); 0387 0388 return c; 0389 } 0390 0391 } // KUnitConversion namespace