From d1193e7aa14eb1340b927178a1c589203a09a517 Mon Sep 17 00:00:00 2001 From: peri4 Date: Thu, 29 Jun 2023 18:20:24 +0300 Subject: [PATCH] version 3.12.1 add piliterals.h --- CMakeLists.txt | 2 +- libs/main/core/piliterals.h | 106 ++++++++++++++++++++++++++++++++++++ main.cpp | 9 ++- 3 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 libs/main/core/piliterals.h diff --git a/CMakeLists.txt b/CMakeLists.txt index baa62ee2..74c746d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake project(PIP) set(PIP_MAJOR 3) set(PIP_MINOR 12) -set(PIP_REVISION 0) +set(PIP_REVISION 1) set(PIP_SUFFIX ) set(PIP_COMPANY SHS) set(PIP_DOMAIN org.SHS) diff --git a/libs/main/core/piliterals.h b/libs/main/core/piliterals.h new file mode 100644 index 00000000..6777f087 --- /dev/null +++ b/libs/main/core/piliterals.h @@ -0,0 +1,106 @@ +/*! \file piliterals.h + * \ingroup Core + * \~\brief + * \~english Bytes C++11 literals + * \~russian C++11 байтовые суффиксы + * + * \~\details + * \~english + * Declare suffixes: + * * _KB, _MB, _GB, _TB, _PB - power of 10 + * * _KiB, _MiB, _GiB, _TiB, _PiB - power of 2 + * \~russian + * Объявляет суффиксы: + * * _KB, _MB, _GB, _TB, _PB - степени 10 + * * _KiB, _MiB, _GiB, _TiB, _PiB - степени 2 + */ +/* + PIP - Platform Independent Primitives + Bytes C++11 literals + 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 PILITERALS_H +#define PILITERALS_H + + +unsigned long long operator""_KB(long double v) { + return v * 1000.; +} +unsigned long long operator""_KB(unsigned long long v) { + return v * 1000; +} +unsigned long long operator""_KiB(long double v) { + return v * 1024.; +} +unsigned long long operator""_KiB(unsigned long long v) { + return v * 1024; +} + +unsigned long long operator""_MB(long double v) { + return v * 1000. * 1000.; +} +unsigned long long operator""_MB(unsigned long long v) { + return v * 1000 * 1000; +} +unsigned long long operator""_MiB(long double v) { + return v * 1024. * 1024.; +} +unsigned long long operator""_MiB(unsigned long long v) { + return v * 1024 * 1024; +} + +unsigned long long operator""_GB(long double v) { + return v * 1000. * 1000. * 1000.; +} +unsigned long long operator""_GB(unsigned long long v) { + return v * 1000 * 1000 * 1000; +} +unsigned long long operator""_GiB(long double v) { + return v * 1024. * 1024. * 1024.; +} +unsigned long long operator""_GiB(unsigned long long v) { + return v * 1024 * 1024 * 1024; +} + +unsigned long long operator""_TB(long double v) { + return v * 1000. * 1000. * 1000. * 1000.; +} +unsigned long long operator""_TB(unsigned long long v) { + return v * 1000 * 1000 * 1000 * 1000; +} +unsigned long long operator""_TiB(long double v) { + return v * 1024. * 1024. * 1024. * 1024.; +} +unsigned long long operator""_TiB(unsigned long long v) { + return v * 1024 * 1024 * 1024 * 1024; +} + +unsigned long long operator""_PB(long double v) { + return v * 1000. * 1000. * 1000. * 1000. * 1000.; +} +unsigned long long operator""_PB(unsigned long long v) { + return v * 1000 * 1000 * 1000 * 1000 * 1000; +} +unsigned long long operator""_PiB(long double v) { + return v * 1024. * 1024. * 1024. * 1024. * 1024.; +} +unsigned long long operator""_PiB(unsigned long long v) { + return v * 1024 * 1024 * 1024 * 1024 * 1024; +} + + +#endif diff --git a/main.cpp b/main.cpp index 0b24c593..8418d880 100644 --- a/main.cpp +++ b/main.cpp @@ -25,8 +25,15 @@ REGISTER_VARIANT_CAST(PIString, SomeType) { PIStringList sl = v.split(';').resize(2); return SomeType{sl[0].toInt(), sl[1].toFloat()}; } - +#include "piliterals.h" int main(int argc, char * argv[]) { + // clang-format off + piCout << 2_MB; + piCout << 2.1_MB; + piCout << 2_MiB; + piCout << 2.1_MiB; + // clang-format on + return 0; /*PIValueTree root; root.addChild({"bool", PIVariant(false)}); root.addChild({"integer", PIVariant(256)});