Macro tycell
Source macro_rules! tycell {
( $on:ident<$($gen:ty),*> {
static $store:ty: once_read;
set $sbname:ident($($_0:tt),*);
$(set $smname:ident($smmain:ty $(,$_1:tt)*): do$(.$smeth:ident($($smvar:ident:$smvarty:ty),* $(=$sconst:expr),*))*; )*
$(set =$sfname:ident($($sfvar:ident:$sfvarty:ty),* $(,$_2:tt)*);)*
$(get $gname:ident($($_3:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_4:tt),*) -> $gfret:ty;)*
}) => { ... };
( $on:ident<$($gen:ty),*> {
static $store:ty: once_write;
set $sbname:ident($($_0:tt),*);
$(set $smname:ident($smmain:ty $(,$_1:tt)*): do$(.$smeth:ident($($smvar:ident:$smvarty:ty),* $(=$sconst:expr),*))*; )*
$(set =$sfname:ident($($sfvar:ident:$sfvarty:ty),* $(,$_2:tt)*);)*
$(get $gname:ident($($_3:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_4:tt),*) -> $gfret:ty;)*
}) => { ... };
( $on:ident<$($gen:ty),*> {
static $store:ty: lazy_read;
set $lazy:block
get $gbname:ident($($_0:tt),*);
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
( $on:ident<$($gen:ty),*> {
static $store:ty: lazy_read;
set $lazy:block
get $gbname:ident($($_0:tt),*) -> $gbret:ty: static$(.$gbmeth:ident( $($gbvar:ident:$gbvarty:ty),* $(=$gbconst:expr),*))*;
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
( $on:ident<$($gen:ty),*> {
static $store:ty: lazy_write;
set $lazy:block
get $gbname:ident($($_0:tt),*);
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
( $on:ident<$($gen:ty),*> {
static $store:ty: lazy_write;
set $lazy:block
get $gbname:ident($($_0:tt),*) -> $gbret:ty: static$(.$gbmeth:ident( $($gbvar:ident:$gbvarty:ty),* $(=$gbconst:expr),*))*;
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
( $on:ident<$($gen:ty),*> {
const $store:ty = $lazy:expr;
get $gbname:ident($($_0:tt),*);
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
( $on:ident<$($gen:ty),*> {
const $store:ty = $const:expr;
get $gbname:ident($($_0:tt),*) -> $gbret:ty: static$(.$gbmeth:ident( $($gbvar:ident:$gbvarty:ty),* $(=$gbconst:expr),*))*;
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
($on:ident{
const $store:ty = $const:expr;
get $gbname:ident($($tt:tt)* $(,$_0:tt)*) -> $gbret:ty: static$(.$gbmeth:ident( $($gbvar:ident:$gbvarty:ty),* $(=$gbconst:expr),*))*;
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
($on:ident{
const $store:ty = $const:expr;
get $gbname:ident($($_0:tt),*);
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
($on:ident{
static $store:ty: $opt:ident;
set $block:block
get $gbname:ident($($tt:tt)* $(,$_0:tt)*) -> $gbret:ty: static$(.$gbmeth:ident( $($gbvar:ident:$gbvarty:ty),* $(=$gbconst:expr),*))*;
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
($on:ident{
static $store:ty: $opt:ident;
set $block:block
get $gbname:ident($($_0:tt),*);
$(get $gname:ident($($_1:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_2:tt),*) -> $gfret:ty;)*
}) => { ... };
($on:ident{
static $store:ty: $opt:ident;
set $sbname:ident($($_0:tt),*);
$(set $smname:ident($smmain:ty $(,$_1:tt)*): do$(.$smeth:ident($($smvar:ident:$smvarty:ty),* $(=$sconst:expr),*))*; )*
$(set =$sfname:ident($($sfvar:ident:$sfvarty:ty),* $(,$_2:tt)*);)*
$(get $gname:ident($($_3:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_4:tt),*) -> $gfret:ty;)*
}) => { ... };
($on:ident{
static $store:ty: $opt:ident;
set $sbname:ident($($_0:tt),*);
$(set $smname:ident($smmain:ty $(,$_1:tt)*): do$(.$smeth:ident($($smvar:ident:$smvarty:ty),* $(=$sconst:expr),*))*; )*
$(set =$sfname:ident($($sfvar:ident:$sfvarty:ty),* $(,$_2:tt)*);)*
get $gbname:ident($($_3:tt),*);
$(get $gname:ident($($_4:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_5:tt),*) -> $gfret:ty;)*
}) => { ... };
($on:ident<$($gen:ty),*> {
static $store:ty: once_read;
set $sbname:ident($($_0:tt),*);
$(set $smname:ident($smmain:ty $(,$_1:tt)*): do$(.$smeth:ident($($smvar:ident:$smvarty:ty),* $(=$sconst:expr),*))*; )*
$(set =$sfname:ident($($sfvar:ident:$sfvarty:ty),* $(,$_2:tt)*);)*
get $gbname:ident($($_3:tt),*);
$(get $gname:ident($($_4:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_5:tt),*) -> $gfret:ty;)*
}) => { ... };
($on:ident<$($gen:ty),*> {
static $store:ty: once_write;
set $sbname:ident($($_0:tt),*);
$(set $smname:ident($smmain:ty $(,$_1:tt)*): do$(.$smeth:ident($($smvar:ident:$smvarty:ty),* $(=$sconst:expr),*))*; )*
$(set =$sfname:ident($($sfvar:ident:$sfvarty:ty),* $(,$_2:tt)*);)*
get $gbname:ident($($_3:tt),*);
$(get $gname:ident($($_4:tt),*) -> $gret:ty: static$(.$gmeth:ident($($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*; )*
$(get =$gfname:ident($($_5:tt),*) -> $gfret:ty;)*
}) => { ... };
(=$on:ty>$ty:ty: $name:ident $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: $name:ident $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: mut $name:ident $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: mut $name:ident $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: $name:ident) => { ... };
(=$on:ty>$ty:ty: $name:ident $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: $name:ident $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: mut $name:ident) => { ... };
(=$on:ty>$ty:ty: mut $name:ident $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))* -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: mut $name:ident $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))*) => { ... };
(=$on:ty>$ty:ty: $name:ident = $val:expr) => { ... };
(=$on:ty>$ty:ty: $name:ident <$key:ty> $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident <$key:ty> $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: $name:ident <$key:ty> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident <$key:ty> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident <$key:ty> $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <$key:ty> $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <$key:ty> $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <$key:ty> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <$key:ty> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <$key:ty> $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: $name:ident <$key:ty>) => { ... };
(=$on:ty>$ty:ty: $name:ident <$key:ty> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: $name:ident <$key:ty> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <$key:ty>) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <$key:ty> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <$key:ty> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: $name:ident <> $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident <> $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: $name:ident <> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident <> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ $lazy:block) => { ... };
(=$on:ty>$ty:ty: $name:ident <> $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <> $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <> $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ $lazy:block) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <> $lazy:block $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: $name:ident <>) => { ... };
(=$on:ty>$ty:ty: $name:ident <> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: $name:ident <> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <>) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+ -> $gret:ty) => { ... };
(=$on:ty>$ty:ty: mut $name:ident <> $(.$gmeth:ident( $($gvar:ident:$gvarty:ty),* $(=$gconst:expr),*))+) => { ... };
(=$on:ty:$($full:tt)*) => { ... };
($($on:ty > $ty:ty: $([$($name:tt)*])*;)*) => { ... };
($($on:ty: $([$($name:tt)*])*;)*) => { ... };
($(!$wrap:ident<$on:ty>: $([$($name:tt)*])*;)*) => { ... };
($(!!$w0:ident<$w1:ident<$on:ty>>: $([$($name:tt)*])*;)*) => { ... };
($(!!!$w0:ident<$w1:ident<$w2:ident<$on:ty>>>: $([$($name:tt)*])*;)*) => { ... };
($(!!!!$w0:ident<$w1:ident<$w2:ident<$w3:ident<$on:ty>>>>: $([$($name:tt)*])*;)*) => { ... };
($( {$($on:tt)*} $([$($name:tt)*])* )*) => { ... };
($( {$($on:tt)*}: $([$($name:tt)*])*; )*) => { ... };
}