docs: README updated

This commit is contained in:
Mateusz Pusz
2023-06-16 10:16:05 +03:00
parent 669007bc66
commit a99bac83a1

View File

@@ -1,29 +1,32 @@
[![GitHub license](https://img.shields.io/github/license/mpusz/units?cacheSeconds=3600&color=informational&label=License)](./LICENSE.md) [![GitHub license](https://img.shields.io/github/license/mpusz/mp-units?cacheSeconds=3600&color=informational&label=License)](./LICENSE.md)
[![GitHub license](https://img.shields.io/badge/C%2B%2B-20-blue)](https://en.cppreference.com/w/cpp/compiler_support#cpp20) [![GitHub license](https://img.shields.io/badge/C%2B%2B-20-blue)](https://en.cppreference.com/w/cpp/compiler_support#cpp20)
[![Conan CI](https://img.shields.io/github/actions/workflow/status/mpusz/units/ci-conan.yml?branch=master&label=Conan%20CI)](https://github.com/mpusz/units/actions?query=workflow%3A%22Conan%20CI%22+branch%3Amaster) [![Conan CI](https://img.shields.io/github/actions/workflow/status/mpusz/mp-units/ci-conan.yml?branch=master&label=Conan%20CI)](https://github.com/mpusz/mp-units/actions?query=workflow%3A%22Conan%20CI%22+branch%3Amaster)
[![CMake CI](https://img.shields.io/github/actions/workflow/status/mpusz/units/ci-test-package-cmake.yml?branch=master&label=CMake%20CI)](https://github.com/mpusz/units/actions?query=workflow%3A%22CMake+Test+Package+CI%22+branch%3Amaster) [![CMake CI](https://img.shields.io/github/actions/workflow/status/mpusz/mp-units/ci-test-package-cmake.yml?branch=master&label=CMake%20CI)](https://github.com/mpusz/mp-units/actions?query=workflow%3A%22CMake+Test+Package+CI%22+branch%3Amaster)
[![Check CI](https://img.shields.io/github/actions/workflow/status/mpusz/units/ci-check.yml?branch=master&label=Check%20CI)](https://github.com/mpusz/units/actions?query=workflow%3A%22Check%20CI%22+branch%3Amaster) [![Check CI](https://img.shields.io/github/actions/workflow/status/mpusz/mp-units/ci-check.yml?branch=master&label=Check%20CI)](https://github.com/mpusz/mp-units/actions?query=workflow%3A%22Check%20CI%22+branch%3Amaster)
[![GitHub Workflow Documentation](https://img.shields.io/github/actions/workflow/status/mpusz/units/documentation.yml?branch=master&label=Documentation)](https://github.com/mpusz/units/actions?query=workflow%3ADocumentation+branch%3Amaster) [![GitHub Workflow Documentation](https://img.shields.io/github/actions/workflow/status/mpusz/mp-units/documentation.yml?branch=master&label=Documentation)](https://github.com/mpusz/mp-units/actions?query=workflow%3ADocumentation+branch%3Amaster)
[![Conan stable](https://img.shields.io/conan/v/mp-units?label=ConanCenter&color=blue)](https://conan.io/center/mp-units) [![Conan stable](https://img.shields.io/conan/v/mp-units?label=ConanCenter&color=blue)](https://conan.io/center/mp-units)
[![Conan testing](https://img.shields.io/badge/mpusz.jfrog.io-0.8.0%3Atesting-blue)](https://mpusz.jfrog.io/ui/packages/conan:%2F%2Fmp-units/0.8.0) [![Conan testing](https://img.shields.io/badge/mpusz.jfrog.io-2.0.0%3Atesting-blue)](https://mpusz.jfrog.io/ui/packages/conan:%2F%2Fmp-units/2.0.0)
# `mp-units` - A Units Library for C++ # `mp-units` - A Physical Quantities and Units library for C++
**The mp-units library is the subject of ISO standardization for C++23/26. More on this can **The mp-units library might be the subject of ISO standardization for C++29.
be found in ISO C++ paper [P1935](https://wg21.link/p1935) and More on this can be found in ISO C++ paper [P1935](https://wg21.link/p1935) and
[NDC TechTown 2021 talk](https://www.youtube.com/watch?v=nudq58d0TFc). We are actively looking for [Using std::cpp 2023 talk](https://www.youtube.com/watch?v=3XSVCmWQklI).
parties interested in field trialing the library.** We are actively looking for parties interested in field trialing the library.**
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/mpusz/units) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/mpusz/mp-units)
**NOTE: The master branch right now is under heavy development of the V2 framework.
For now it compiles only on gcc-12+. In the upcoming months a lot of efforts will be done to
enable the rest of mainstream compilers and update the documentation to reflect the V2 design.**
## Documentation ## Documentation
An extensive project documentation including installation instructions and user's An extensive project documentation for the previous release library version can be found on
guide can be found on [mp-units GitHub Pages](https://mpusz.github.io/units). [mp-units GitHub Pages](https://mpusz.github.io/mp-units). It includes installation instructions and user's guide.
## Terms and Definitions ## Terms and Definitions
@@ -31,26 +34,21 @@ guide can be found on [mp-units GitHub Pages](https://mpusz.github.io/units).
This project uses the official metrology vocabulary defined by the ISO and BIPM. This project uses the official metrology vocabulary defined by the ISO and BIPM.
Please familiarize yourself with those terms to better understand the documentation Please familiarize yourself with those terms to better understand the documentation
and improve domain-related communication and discussions. You can find essential and improve domain-related communication and discussions. You can find essential
project-related definitions in [our documentation's "Glossary" chapter](https://mpusz.github.io/units/glossary.html). project-related definitions in [our documentation's "Glossary" chapter](https://mpusz.github.io/mp-units/glossary.html).
Even more terms are provided in the official vocabulary of the [ISO](https://www.iso.org/obp/ui#iso:std:iso-iec:guide:99:ed-1:v2:en) Even more terms are provided in the official vocabulary of the [ISO](https://www.iso.org/obp/ui#iso:std:iso-iec:guide:99:ed-1:v2:en)
and [BIPM](https://jcgm.bipm.org/vim/en). and [BIPM](https://jcgm.bipm.org/vim/en).
## TL;DR ## TL;DR
`mp-units` is a compile-time enabled Modern C++ library that provides compile-time dimensional `mp-units` is a compile-time enabled Modern C++ library that provides compile-time dimensional
analysis and unit/quantity manipulation. The basic idea and design heavily bases on analysis and unit/quantity manipulation.
`std::chrono::duration` and extends it to work properly with many dimensions.
Here is a small example of possible operations: Here is a small example of possible operations:
```cpp ```cpp
#include <units/isq/si/area.h> #include <mp-units/systems/si/si.h>
#include <units/isq/si/frequency.h>
#include <units/isq/si/length.h>
#include <units/isq/si/speed.h>
#include <units/isq/si/time.h>
using namespace units::isq::si::references; using namespace mp_units::si::unit_symbols;
// simple numeric operations // simple numeric operations
static_assert(10 * km / 2 == 5 * km); static_assert(10 * km / 2 == 5 * km);
@@ -72,43 +70,40 @@ static_assert(10 * km / (5 * km) == 2);
static_assert(1000 / (1 * s) == 1 * kHz); static_assert(1000 / (1 * s) == 1 * kHz);
``` ```
_Try it on the [Compiler Explorer](https://godbolt.org/z/qbbbnfK3s)._ _Try it on the [Compiler Explorer](https://godbolt.org/z/j8afKnarv)._
This library requires some C++20 features (concepts, classes as NTTPs, ...). Thanks to This library heavily uses C++20 features (concepts, classes as NTTPs, ...). Thanks to
them the user gets a powerful but still easy to use interface and all unit conversions them the user gets a powerful but still easy to use interfaces and all unit conversions
and dimensional analysis can be performed without sacrificing on accuracy. Please see and dimensional analysis can be performed without sacrificing on runtime performance or
the below example for a quick preview of basic library features: accuracy. Please see the below example for a quick preview of basic library features:
```cpp ```cpp
#include <units/format.h> #include <mp-units/format.h>
#include <units/isq/si/international/length.h> #include <mp-units/iostream.h>
#include <units/isq/si/international/speed.h> #include <mp-units/systems/international/international.h>
#include <units/isq/si/length.h> #include <mp-units/systems/isq/space_and_time.h>
#include <units/isq/si/speed.h> #include <mp-units/systems/si/si.h>
#include <units/isq/si/time.h>
#include <units/quantity_io.h>
#include <iostream> #include <iostream>
using namespace units::isq; using namespace mp_units;
constexpr Speed auto avg_speed(Length auto d, Time auto t) constexpr QuantityOf<isq::speed> auto avg_speed(QuantityOf<isq::distance> auto d, QuantityOf<isq::duration> auto t)
{ {
return d / t; return d / t;
} }
int main() int main()
{ {
using namespace units::isq::si::literals; using namespace mp_units::si::unit_symbols;
using namespace units::isq::si::references; using namespace mp_units::international::unit_symbols;
using namespace units::aliases::isq::si::international;
constexpr Speed auto v1 = 110 * (km / h); constexpr auto v1 = 110 * (km / h);
constexpr Speed auto v2 = mi_per_h(70.); constexpr auto v2 = 70 * mph;
constexpr Speed auto v3 = avg_speed(220_q_km, 2_q_h); constexpr auto v3 = avg_speed(220. * km, 2 * h);
constexpr Speed auto v4 = avg_speed(si::length<si::international::mile>(140), si::time<si::hour>(2)); constexpr auto v4 = avg_speed(isq::distance(140. * mi), 2 * isq::duration[h]);
constexpr Speed auto v5 = quantity_cast<si::speed<si::metre_per_second>>(v3); constexpr auto v5 = v3[m / s];
constexpr Speed auto v6 = quantity_cast<si::metre_per_second>(v4); constexpr auto v6 = value_cast<m / s>(v4);
constexpr Speed auto v7 = quantity_cast<int>(v6); constexpr auto v7 = value_cast<int>(v6);
std::cout << v1 << '\n'; // 110 km/h std::cout << v1 << '\n'; // 110 km/h
std::cout << v2 << '\n'; // 70 mi/h std::cout << v2 << '\n'; // 70 mi/h