tt_num/
lib.rs

1/// Convert a number from pseudo-base-10 to a unary encoding.
2/// <sup>**[tt-call]**</sup>
3/// 
4/// # Input
5/// 
6///   - `input = [{` integer literal, N, with **each digit as a separate token** `}]`
7///   - `acc = [{ }]` (for internal use, must be empty)
8///   
9/// # Output
10/// 
11///   - `input = [{` sequence of N tokens (namely ` .`) `}]`
12///   
13/// # Example
14/// 
15/// ```rust
16/// #![feature(use_extern_macros)]
17/// extern crate tt_call;
18/// extern crate tt_num;
19/// use tt_call::tt_call;
20/// use tt_num::tt_atoi;
21/// 
22/// fn main() {
23///     assert_eq!(
24///         tt_call! {
25///             macro = [{ tt_atoi }]
26///             input = [{ 1 0 }]
27///             acc = [{ }]
28///             ~~> stringify
29///         },
30///         "input = [ { . . . . . . . . . . } ]"
31///     );
32/// }
33/// ```
34/// 
35/// See also `examples/times.rs`.
36/// 
37#[macro_export]
38macro_rules! tt_atoi {
39    // done
40    {
41        $caller:tt
42        input = [{ }]
43        acc = [{ $($a:tt)* }]
44    } => {
45        tt_call::tt_return! {
46            $caller
47            input = [{ $($a)* }]
48        }
49    };
50
51    // 0
52    {
53        $caller:tt
54        input = [{ 0 $($n:tt)* }]
55        acc = [{ $($a:tt)* }]
56    } => {
57        tt_atoi! {
58            $caller
59            input = [{ $($n)* }]
60            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* }]
61        }
62    };
63
64    // 1
65    {
66        $caller:tt
67        input = [{ 1 $($n:tt)* }]
68        acc = [{ $($a:tt)* }]
69    } => {
70        tt_atoi! {
71            $caller
72            input = [{ $($n)* }]
73            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . }]
74        }
75    };
76
77    // 2
78    {
79        $caller:tt
80        input = [{ 2 $($n:tt)* }]
81        acc = [{ $($a:tt)* }]
82    } => {
83        tt_atoi! {
84            $caller
85            input = [{ $($n)* }]
86            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . . }]
87        }
88    };
89
90    // 3
91    {
92        $caller:tt
93        input = [{ 3 $($n:tt)* }]
94        acc = [{ $($a:tt)* }]
95    } => {
96        tt_atoi! {
97            $caller
98            input = [{ $($n)* }]
99            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . . . }]
100        }
101    };
102
103    // 4
104    {
105        $caller:tt
106        input = [{ 4 $($n:tt)* }]
107        acc = [{ $($a:tt)* }]
108    } => {
109        tt_atoi! {
110            $caller
111            input = [{ $($n)* }]
112            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . . . . }]
113        }
114    };
115
116    // 5
117    {
118        $caller:tt
119        input = [{ 5 $($n:tt)* }]
120        acc = [{ $($a:tt)* }]
121    } => {
122        tt_atoi! {
123            $caller
124            input = [{ $($n)* }]
125            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . . . . . }]
126        }
127    };
128
129    // 6
130    {
131        $caller:tt
132        input = [{ 6 $($n:tt)* }]
133        acc = [{ $($a:tt)* }]
134    } => {
135        tt_atoi! {
136            $caller
137            input = [{ $($n)* }]
138            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . . . . . . }]
139        }
140    };
141
142    // 7
143    {
144        $caller:tt
145        input = [{ 7 $($n:tt)* }]
146        acc = [{ $($a:tt)* }]
147    } => {
148        tt_atoi! {
149            $caller
150            input = [{ $($n)* }]
151            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . . . . . . . }]
152        }
153    };
154
155    // 8
156    {
157        $caller:tt
158        input = [{ 8 $($n:tt)* }]
159        acc = [{ $($a:tt)* }]
160    } => {
161        tt_atoi! {
162            $caller
163            input = [{ $($n)* }]
164            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . . . . . . . . }]
165        }
166    };
167
168    // 9
169    {
170        $caller:tt
171        input = [{ 9 $($n:tt)* }]
172        acc = [{ $($a:tt)* }]
173    } => {
174        tt_atoi! {
175            $caller
176            input = [{ $($n)* }]
177            acc = [{ $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* $($a)* . . . . . . . . . }]
178        }
179    };
180}
181