Skip to content

Commit

Permalink
[qty.dim] Move operations under [qty.dim.ops]
Browse files Browse the repository at this point in the history
  • Loading branch information
JohelEGP committed Nov 27, 2024
1 parent c7975d0 commit b32161a
Showing 1 changed file with 94 additions and 23 deletions.
117 changes: 94 additions & 23 deletions docs/api_reference/src/quantities.tex
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,15 @@
struct dimension_one;
inline constexpr dimension_one @\libglobal{dimension_one}@{};

consteval @\libconcept{Dimension}@ auto @\liboverload{inverse}{\cname{Dimension}}@(@\libconcept{Dimension}@ auto d) { return dimension_one / d; }
// \ref{qty.dim.ops}, operations

consteval @\libconcept{Dimension}@ auto inverse(@\libconcept{Dimension}@ auto d);

template<std::intmax_t Num, std::intmax_t Den = 1, @\libconcept{Dimension}@ D>
requires(Den != 0)
consteval @\libconcept{Dimension}@ auto pow(D d);
consteval @\libconcept{Dimension}@ auto @\liboverload{sqrt}{\cname{Dimension}}@(@\libconcept{Dimension}@ auto d) { return pow<1, 2>(d); }
consteval @\libconcept{Dimension}@ auto @\liboverload{cbrt}{\cname{Dimension}}@(@\libconcept{Dimension}@ auto d) { return pow<1, 3>(d); }
consteval @\libconcept{Dimension}@ auto sqrt(@\libconcept{Dimension}@ auto d);
consteval @\libconcept{Dimension}@ auto cbrt(@\libconcept{Dimension}@ auto d);

// \ref{qty.dim.sym.fmt}, symbol formatting

Expand Down Expand Up @@ -1310,29 +1312,9 @@

\rSec3[qty.dim.types]{Types}

\indexlibrarymemberconcept{operator*}{Dimension}
\indexlibrarymemberconcept{operator/}{Dimension}
\indexlibrarymemberconcept{operator==}{Dimension}
\begin{codeblock}
namespace mp_units {

struct @\exposidnc{dimension-interface}@ { // \expos
friend consteval @\libconcept{Dimension}@ auto operator*(@\libconcept{Dimension}@ auto lhs, @\libconcept{Dimension}@ auto rhs)
{
return @\exposidnc{expr-multiply}@<derived_dimension, struct dimension_one>(lhs, rhs);
}

friend consteval @\libconcept{Dimension}@ auto operator/(@\libconcept{Dimension}@ auto lhs, @\libconcept{Dimension}@ auto rhs)
{
return @\exposidnc{expr-divide}@<derived_dimension, struct dimension_one>(lhs, rhs);
}

friend consteval bool operator==(@\libconcept{Dimension}@ auto lhs, @\libconcept{Dimension}@ auto rhs)
{
return std::is_same_v<decltype(lhs), decltype(rhs)>;
}
};

template<symbol_text Symbol>
struct @\libglobal{base_dimension}@ : @\exposidnc{dimension-interface}@ {
static constexpr auto @\exposidnc{symbol}@ = Symbol; // \expos
Expand Down Expand Up @@ -1391,6 +1373,73 @@
\pnum
\tcode{dimension_one} represents the dimension of a quantity of dimension one\irefiev{112-01-13}.
\rSec3[qty.dim.ops]{Operations}
\indexlibraryglobalexpos{dimension-interface}
\begin{codeblock}
namespace mp_units {
struct @\exposidnc{dimension-interface}@ { // \expos
template<@\libconcept{Dimension}@ Lhs, @\libconcept{Dimension}@ Rhs>
friend consteval @\libconcept{Dimension}@ auto operator*(Lhs, Rhs);
template<@\libconcept{Dimension}@ Lhs, @\libconcept{Dimension}@ Rhs>
friend consteval @\libconcept{Dimension}@ auto operator/(Lhs, Rhs);
template<@\libconcept{Dimension}@ Lhs, @\libconcept{Dimension}@ Rhs>
friend consteval bool operator==(Lhs, Rhs);
};
}
\end{codeblock}
\indexlibrarymemberconcept{operator*}{Dimension}
\begin{itemdecl}
template<@\libconcept{Dimension}@ Lhs, @\libconcept{Dimension}@ Rhs>
friend consteval @\libconcept{Dimension}@ auto operator*(Lhs, Rhs);
\end{itemdecl}
\begin{itemdescr}
\pnum
\returns
\tcode{\exposidnc{expr-multiply}<derived_dimension, struct dimension_one>(Lhs{}, Rhs{})}.
\end{itemdescr}
\indexlibrarymemberconcept{operator/}{Dimension}
\begin{itemdecl}
template<@\libconcept{Dimension}@ Lhs, @\libconcept{Dimension}@ Rhs>
friend consteval @\libconcept{Dimension}@ auto operator/(Lhs, Rhs);
\end{itemdecl}
\begin{itemdescr}
\pnum
\returns
\tcode{\exposidnc{expr-divide}<derived_dimension, struct dimension_one>(Lhs{}, Rhs{})}.
\end{itemdescr}
\indexlibrarymemberconcept{operator==}{Dimension}
\begin{itemdecl}
template<@\libconcept{Dimension}@ Lhs, @\libconcept{Dimension}@ Rhs>
friend consteval bool operator==(Lhs, Rhs);
\end{itemdecl}
\begin{itemdescr}
\pnum
\returns
\tcode{std::is_same_v<Lhs, Rhs>}.
\end{itemdescr}
\indexlibrarymemberconcept{inverse}{Dimension}
\begin{itemdecl}
consteval @\libconcept{Dimension}@ auto inverse(@\libconcept{Dimension}@ auto d);
\end{itemdecl}
\begin{itemdescr}
\pnum
\returns
\tcode{dimension_one / d}.
\end{itemdescr}
\indexlibrarymemberconcept{pow}{Dimension}
\begin{itemdecl}
template<std::intmax_t Num, std::intmax_t Den = 1, @\libconcept{Dimension}@ D>
Expand All @@ -1404,6 +1453,28 @@
\tcode{\exposidnc{expr-pow}<Num, Den, derived_dimension, struct dimension_one>(d)}.
\end{itemdescr}
\indexlibrarymemberconcept{sqrt}{Dimension}
\begin{itemdecl}
consteval @\libconcept{Dimension}@ auto sqrt(@\libconcept{Dimension}@ auto d);
\end{itemdecl}
\begin{itemdescr}
\pnum
\returns
\tcode{pow<1, 2>(d)}.
\end{itemdescr}
\indexlibrarymemberconcept{cbrt}{Dimension}
\begin{itemdecl}
consteval @\libconcept{Dimension}@ auto cbrt(@\libconcept{Dimension}@ auto d);
\end{itemdecl}
\begin{itemdescr}
\pnum
\returns
\tcode{pow<1, 3>(d)}.
\end{itemdescr}
\rSec3[qty.dim.sym.fmt]{Symbol formatting}
\indexlibraryglobal{dimension_symbol_to}
Expand Down

0 comments on commit b32161a

Please sign in to comment.