2019-09-16 15:53:39 -07:00
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta name = "generator" content = "rustdoc" > < meta name = "description" content = "API documentation for the Rust `op` macro in crate `typenum`." > < meta name = "keywords" content = "rust, rustlang, rust-lang, op" > < title > typenum::op - Rust< / title > < link rel = "stylesheet" type = "text/css" href = "../normalize.css" > < link rel = "stylesheet" type = "text/css" href = "../rustdoc.css" id = "mainThemeStyle" > < link rel = "stylesheet" type = "text/css" href = "../dark.css" > < link rel = "stylesheet" type = "text/css" href = "../light.css" id = "themeStyle" > < script src = "../storage.js" > < / script > < noscript > < link rel = "stylesheet" href = "../noscript.css" > < / noscript > < link rel = "shortcut icon" href = "../favicon.ico" > < style type = "text/css" > # crate-search { background-image : url ( "../down-arrow.svg" ) ; } < / style > < / head > < body class = "rustdoc macro" > <!-- [if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif] --> < nav class = "sidebar" > < div class = "sidebar-menu" > ☰ < / div > < a href = '../typenum/index.html' > < div class = 'logo-container' > < img src = '../rust-logo.png' alt = 'logo' > < / div > < / a > < div class = "sidebar-elems" > < p class = 'location' > < a href = 'index.html' > typenum< / a > < / p > < script > window . sidebarCurrent = { name : 'op' , ty : 'macro' , relpath : '' } ; < / script > < script defer src = "sidebar-items.js" > < / script > < / div > < / nav > < div class = "theme-picker" > < button id = "theme-picker" aria-label = "Pick another theme!" > < img src = "../brush.svg" width = "18" alt = "Pick another theme!" > < / button > < div id = "theme-choices" > < / div > < / div > < script src = "../theme.js" > < / script > < nav class = "sub" > < form class = "search-form js-only" > < div class = "search-container" > < div > < select id = "crate-search" > < option value = "All crates" > All crates< / option > < / select > < input class = "search-input" name = "search" autocomplete = "off" spellcheck = "false" placeholder = "Click or press ‘ S’ to search, ‘ ?’ for more options…" type = "search" > < / div > < a id = "settings-menu" href = "../settings.html" > < img src = "../wheel.svg" width = "18" alt = "Change settings" > < / a > < / div > < / form > < / nav > < section id = "main" class = "content" > < h1 class = 'fqn' > < span class = 'out-of-band' > < span id = 'render-detail' > < a id = "toggle-all-docs" href = "javascript:void(0)" title = "collapse all docs" > [< span class = 'inner' > − < / span > ]< / a > < / span > < a class = 'srclink' href = '../src/typenum/Users/syrusakbary/Development/wasmer/target/release/build/typenum-1247676d531e6170/out/op.rs.html#290-292' title = 'goto source code' > [src]< / a > < / span > < span class = 'in-band' > Macro < a href = 'index.html' > typenum< / a > ::< wbr > < a class = "macro" href = '' > op< / a > < / span > < / h1 > < div class = "docblock type-decl hidden-by-usual-hider" > < div class = "example-wrap" > < pre class = "rust macro" >
2019-09-06 15:57:44 -07:00
< span class = "macro" > macro_rules< / span > < span class = "macro" > !< / span > < span class = "ident" > op< / span > {
($(< span class = "macro-nonterminal" > $< / span > < span class = "macro-nonterminal" > tail< / span > :< span class = "ident" > tt< / span > )< span class = "kw-2" > *< / span > ) < span class = "op" > =< / span > < span class = "op" > > < / span > { ... };
}< / pre > < / div >
< / div > < div class = 'docblock' > < p > Convenient type operations.< / p >
< p > Any types representing values must be able to be expressed as < code > ident< / code > s. That means they need to be
in scope.< / p >
< p > For example, < code > P5< / code > is okay, but < code > typenum::P5< / code > is not.< / p >
< p > You may combine operators arbitrarily, although doing so excessively may require raising the
recursion limit.< / p >
< h1 id = "example" class = "section-header" > < a href = "#example" > Example< / a > < / h1 >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "attribute" > #![< span class = "ident" > recursion_limit< / span > < span class = "op" > =< / span > < span class = "string" > " 128" < / span > ]< / span >
< span class = "attribute" > #[< span class = "ident" > macro_use< / span > ]< / span > < span class = "kw" > extern< / span > < span class = "kw" > crate< / span > < span class = "ident" > typenum< / span > ;
< span class = "kw" > use< / span > < span class = "ident" > typenum< / span > ::< span class = "ident" > consts< / span > ::< span class = "kw-2" > *< / span > ;
< span class = "kw" > fn< / span > < span class = "ident" > main< / span > () {
< span class = "macro" > assert_type< / span > < span class = "macro" > !< / span > (
< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > min< / span > ((< span class = "ident" > P1< / span > < span class = "op" > -< / span > < span class = "ident" > P2< / span > ) < span class = "op" > *< / span > (< span class = "ident" > N3< / span > < span class = "op" > +< / span > < span class = "ident" > N7< / span > ), < span class = "ident" > P5< / span > < span class = "op" > *< / span > (< span class = "ident" > P3< / span > < span class = "op" > +< / span > < span class = "ident" > P4< / span > )) < span class = "op" > =< / span > < span class = "op" > =< / span > < span class = "ident" > P10< / span > )
);
}< / pre > < / div >
< p > Operators are evaluated based on the operator precedence outlined
< a href = "https://doc.rust-lang.org/reference.html#operator-precedence" > here< / a > .< / p >
< p > The full list of supported operators and functions is as follows:< / p >
< p > < code > *< / code > , < code > /< / code > , < code > %< / code > , < code > +< / code > , < code > -< / code > , < code > < < < / code > , < code > > > < / code > , < code > & < / code > , < code > ^< / code > , < code > |< / code > , < code > ==< / code > , < code > !=< / code > , < code > < =< / code > , < code > > =< / code > , < code > < < / code > , < code > > < / code > , < code > cmp< / code > , < code > sqr< / code > , < code > abs< / code > , < code > cube< / code > , < code > pow< / code > , < code > min< / code > , < code > max< / code > < / p >
< p > They all expand to type aliases defined in the < code > operator_aliases< / code > module. Here is an expanded list,
including examples:< / p >
< hr / >
< p > Operator < code > *< / code > . Expands to < code > Prod< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P2< / span > < span class = "op" > *< / span > < span class = "ident" > P3< / span > ), < span class = "ident" > P6< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > /< / code > . Expands to < code > Quot< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P6< / span > < span class = "op" > /< / span > < span class = "ident" > P2< / span > ), < span class = "ident" > P3< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > %< / code > . Expands to < code > Mod< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P5< / span > < span class = "op" > %< / span > < span class = "ident" > P3< / span > ), < span class = "ident" > P2< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > +< / code > . Expands to < code > Sum< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P2< / span > < span class = "op" > +< / span > < span class = "ident" > P3< / span > ), < span class = "ident" > P5< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > -< / code > . Expands to < code > Diff< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P2< / span > < span class = "op" > -< / span > < span class = "ident" > P3< / span > ), < span class = "ident" > N1< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > < < < / code > . Expands to < code > Shleft< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > U1< / span > < span class = "op" > < < / span > < span class = "op" > < < / span > < span class = "ident" > U5< / span > ), < span class = "ident" > U32< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > > > < / code > . Expands to < code > Shright< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > U32< / span > < span class = "op" > > < / span > < span class = "op" > > < / span > < span class = "ident" > U5< / span > ), < span class = "ident" > U1< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > & < / code > . Expands to < code > And< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > U5< / span > < span class = "op" > & < / span > < span class = "ident" > U3< / span > ), < span class = "ident" > U1< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > ^< / code > . Expands to < code > Xor< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > U5< / span > < span class = "op" > ^< / span > < span class = "ident" > U3< / span > ), < span class = "ident" > U6< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > |< / code > . Expands to < code > Or< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > U5< / span > < span class = "op" > |< / span > < span class = "ident" > U3< / span > ), < span class = "ident" > U7< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > ==< / code > . Expands to < code > Eq< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P5< / span > < span class = "op" > =< / span > < span class = "op" > =< / span > < span class = "ident" > P3< / span > < span class = "op" > +< / span > < span class = "ident" > P2< / span > ), < span class = "ident" > True< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > !=< / code > . Expands to < code > NotEq< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P5< / span > < span class = "op" > !< / span > < span class = "op" > =< / span > < span class = "ident" > P3< / span > < span class = "op" > +< / span > < span class = "ident" > P2< / span > ), < span class = "ident" > False< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > < =< / code > . Expands to < code > LeEq< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P6< / span > < span class = "op" > < < / span > < span class = "op" > =< / span > < span class = "ident" > P3< / span > < span class = "op" > +< / span > < span class = "ident" > P2< / span > ), < span class = "ident" > False< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > > =< / code > . Expands to < code > GrEq< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P6< / span > < span class = "op" > > < / span > < span class = "op" > =< / span > < span class = "ident" > P3< / span > < span class = "op" > +< / span > < span class = "ident" > P2< / span > ), < span class = "ident" > True< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > < < / code > . Expands to < code > Le< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P4< / span > < span class = "op" > < < / span > < span class = "ident" > P3< / span > < span class = "op" > +< / span > < span class = "ident" > P2< / span > ), < span class = "ident" > True< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > > < / code > . Expands to < code > Gr< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > P5< / span > < span class = "op" > < < / span > < span class = "ident" > P3< / span > < span class = "op" > +< / span > < span class = "ident" > P2< / span > ), < span class = "ident" > False< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > cmp< / code > . Expands to < code > Compare< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > cmp< / span > (< span class = "ident" > P2< / span > , < span class = "ident" > P3< / span > )), < span class = "ident" > Less< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > sqr< / code > . Expands to < code > Square< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > sqr< / span > (< span class = "ident" > P2< / span > )), < span class = "ident" > P4< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > abs< / code > . Expands to < code > AbsVal< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > abs< / span > (< span class = "ident" > N2< / span > )), < span class = "ident" > P2< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > cube< / code > . Expands to < code > Cube< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > cube< / span > (< span class = "ident" > P2< / span > )), < span class = "ident" > P8< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > pow< / code > . Expands to < code > Exp< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > pow< / span > (< span class = "ident" > P2< / span > , < span class = "ident" > P3< / span > )), < span class = "ident" > P8< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > min< / code > . Expands to < code > Minimum< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > min< / span > (< span class = "ident" > P2< / span > , < span class = "ident" > P3< / span > )), < span class = "ident" > P2< / span > );< / pre > < / div >
< hr / >
< p > Operator < code > max< / code > . Expands to < code > Maximum< / code > .< / p >
< div class = "example-wrap" > < pre class = "rust rust-example-rendered" >
< span class = "macro" > assert_type_eq< / span > < span class = "macro" > !< / span > (< span class = "macro" > op< / span > < span class = "macro" > !< / span > (< span class = "ident" > max< / span > (< span class = "ident" > P2< / span > , < span class = "ident" > P3< / span > )), < span class = "ident" > P3< / span > );< / pre > < / div >
< / div > < / section > < section id = "search" class = "content hidden" > < / section > < section class = "footer" > < / section > < aside id = "help" class = "hidden" > < div > < h1 class = "hidden" > Help< / h1 > < div class = "shortcuts" > < h2 > Keyboard Shortcuts< / h2 > < dl > < dt > < kbd > ?< / kbd > < / dt > < dd > Show this help dialog< / dd > < dt > < kbd > S< / kbd > < / dt > < dd > Focus the search field< / dd > < dt > < kbd > ↑< / kbd > < / dt > < dd > Move up in search results< / dd > < dt > < kbd > ↓< / kbd > < / dt > < dd > Move down in search results< / dd > < dt > < kbd > ↹< / kbd > < / dt > < dd > Switch tab< / dd > < dt > < kbd > ⏎ < / kbd > < / dt > < dd > Go to active search result< / dd > < dt > < kbd > +< / kbd > < / dt > < dd > Expand all sections< / dd > < dt > < kbd > -< / kbd > < / dt > < dd > Collapse all sections< / dd > < / dl > < / div > < div class = "infos" > < h2 > Search Tricks< / h2 > < p > Prefix searches with a type followed by a colon (e.g., < code > fn:< / code > ) to restrict the search to a given type.< / p > < p > Accepted types are: < code > fn< / code > , < code > mod< / code > , < code > struct< / code > , < code > enum< / code > , < code > trait< / code > , < code > type< / code > , < code > macro< / code > , and < code > const< / code > .< / p > < p > Search functions by type signature (e.g., < code > vec -> usize< / code > or < code > * -> vec< / code > )< / p > < p > Search multiple things at once by splitting your query with comma (e.g., < code > str,u8< / code > or < code > String,struct:Vec,test< / code > )< / p > < / div > < / div > < / aside > < script > window . rootPath = "../" ; window . currentCrate = "typenum" ; < / script > < script src = "../aliases.js" > < / script > < script src = "../main.js" > < / script > < script defer src = "../search-index.js" > < / script > < / body > < / html >