summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/units/example/autoprefixes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/units/example/autoprefixes.cpp')
-rw-r--r--src/boost/libs/units/example/autoprefixes.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/boost/libs/units/example/autoprefixes.cpp b/src/boost/libs/units/example/autoprefixes.cpp
new file mode 100644
index 00000000..9966766c
--- /dev/null
+++ b/src/boost/libs/units/example/autoprefixes.cpp
@@ -0,0 +1,148 @@
+// Boost.Units - A C++ library for zero-overhead dimensional analysis and
+// unit/quantity manipulation and conversion
+//
+// Copyright (C) 2003-2008 Matthias Christian Schabel
+// Copyright (C) 2008 Steven Watanabe
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+\file
+
+\brief Example of using autoprefixes.
+
+\details
+Example of using engineering (10^3) and binary (2^10) autoprefixes.
+
+Output:
+@verbatim
+autoprefixes.cpp
+using native typeof
+Linking...
+Embedding manifest...
+Autorun "j:\Cpp\Misc\debug\autoprefixes.exe"
+2.345 m
+2.345 km
+5.49902 MJ
+5.49902 megajoule
+2.048 kb
+2 Kib
+2345.6
+23456
+2345.6
+23456
+m
+meter
+0
+1
+@endverbatim
+//[autoprefixes_output
+
+//] [/autoprefixes_output
+
+**/
+
+#include <iostream>
+
+#include <boost/units/io.hpp>
+#include <boost/units/pow.hpp>
+#include <boost/units/systems/si.hpp>
+#include <boost/units/systems/si/io.hpp>
+#include <boost/units/quantity.hpp>
+
+struct byte_base_unit : boost::units::base_unit<byte_base_unit, boost::units::dimensionless_type, 3>
+{
+ static constexpr const char* name() { return("byte"); }
+ static constexpr const char* symbol() { return("b"); }
+};
+
+struct thing_base_unit : boost::units::base_unit<thing_base_unit, boost::units::dimensionless_type, 4>
+{
+ static constexpr const char* name() { return("thing"); }
+ static constexpr const char* symbol() { return(""); }
+};
+
+struct euro_base_unit : boost::units::base_unit<euro_base_unit, boost::units::dimensionless_type, 5>
+{
+ static constexpr const char* name() { return("EUR"); }
+ static constexpr const char* symbol() { return("€"); }
+};
+
+int main()
+{
+ using std::cout;
+ using std::endl;
+
+ using namespace boost::units;
+ using namespace boost::units::si;
+
+ //[autoprefixes_snippet_1
+ using boost::units::binary_prefix;
+ using boost::units::engineering_prefix;
+ using boost::units::no_prefix;
+
+ quantity<length> l = 2.345 * meters; // A quantity of length, in units of meters.
+ cout << engineering_prefix << l << endl; // Outputs "2.345 m".
+ l = 1000.0 * l; // Increase it by 1000, so expect a k prefix.
+ // Note that a double 1000.0 is required - an integer will fail to compile.
+ cout << engineering_prefix << l << endl; // Output autoprefixed with k to "2.345 km".
+
+ quantity<energy> e = kilograms * pow<2>(l / seconds); // A quantity of energy.
+ cout << engineering_prefix << e << endl; // 5.49902 MJ
+ cout << name_format << engineering_prefix << e << endl; // 5.49902 megaJoule
+ //] [/autoprefixes_snippet_1]
+
+ //[autoprefixes_snippet_2
+ // Don't forget that the units name or symbol format specification is persistent.
+ cout << symbol_format << endl; // Resets the format to the default symbol format.
+
+ quantity<byte_base_unit::unit_type> b = 2048. * byte_base_unit::unit_type();
+ cout << engineering_prefix << b << endl; // 2.048 kb
+ cout << symbol_format << binary_prefix << b << endl; // "2 Kib"
+ //] [/autoprefixes_snippet_2]
+
+ // Note that scalar dimensionless values are *not* prefixed automatically by the engineering_prefix or binary_prefix iostream manipulators.
+ //[autoprefixes_snippet_3
+ const double s1 = 2345.6;
+ const long x1 = 23456;
+ cout << engineering_prefix << s1 << endl; // 2345.6
+ cout << engineering_prefix << x1 << endl; // 23456
+
+ cout << binary_prefix << s1 << endl; // 2345.6
+ cout << binary_prefix << x1 << endl; // 23456
+ //] [/autoprefixes_snippet_3]
+
+ //[autoprefixes_snippet_4
+ const length L; // A unit of length (but not a quantity of length).
+ cout << L << endl; // Default length unit is meter,
+ // but default is symbol format so output is just "m".
+ cout << name_format << L << endl; // default length name is "meter".
+ //] [/autoprefixes_snippet_4]
+
+ //[autoprefixes_snippet_5
+ no_prefix(cout); // Clear any prefix flag.
+ cout << no_prefix << endl; // Clear any prefix flag using `no_prefix` manipulator.
+ //] [/autoprefixes_snippet_5]
+
+ //[autoprefixes_snippet_6
+ cout << boost::units::get_autoprefix(cout) << endl; // 8 is `autoprefix_binary` from `enum autoprefix_mode`.
+ cout << boost::units::get_format(cout) << endl; // 1 is `name_fmt` from `enum format_mode`.
+ //] [/autoprefixes_snippet_6]
+
+
+ quantity<thing_base_unit::unit_type> t = 2048. * thing_base_unit::unit_type();
+ cout << name_format << engineering_prefix << t << endl; // 2.048 kilothing
+ cout << symbol_format << engineering_prefix << t << endl; // 2.048 k
+
+ cout << binary_prefix << t << endl; // "2 Ki"
+
+ quantity<euro_base_unit::unit_type> ce = 2048. * euro_base_unit::unit_type();
+ cout << name_format << engineering_prefix << ce << endl; // 2.048 kiloEUR
+ cout << symbol_format << engineering_prefix << ce << endl; // 2.048 k€
+
+
+ return 0;
+} // int main()
+