1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#![allow(unused_macros)]
#[cfg(not(feature="unsafe"))]
macro_rules! fast_ref {
(($slice : expr)[$index: expr]) => (
&($slice)[$index]
);
}
#[cfg(not(feature="unsafe"))]
macro_rules! fast_inner {
(($slice : expr)[$index: expr]) => (
($slice)[$index]
);
}
#[cfg(not(feature="unsafe"))]
macro_rules! fast_inner {
(($slice : expr)[$index: expr]) => (
($slice)[$index]
);
}
#[cfg(not(feature="unsafe"))]
macro_rules! fast {
(($slice : expr)[$index: expr]) => (
($slice)[$index]
);
(($slice : expr)[$start: expr ; $end : expr]) => (
&($slice)[$start .. $end]
);
(($slice : expr)[$start: expr ;]) => (
&($slice)[$start .. ]
);
(($slice : expr)[; $end : expr]) => (
&($slice)[.. $end ]
);
}
#[cfg(not(feature="unsafe"))]
macro_rules! fast_uninitialized {
[$size : expr] => ([0; $size]);
[$def_value : expr ; $size : expr] => ([$def_value; $size]);
}
#[cfg(not(feature="unsafe"))]
macro_rules! fast_mut {
(($slice : expr)[$index: expr]) => (
($slice)[$index]
);
(($slice : expr)[$start: expr ; $end : expr]) => (
&mut $slice[$start..$end]
);
(($slice : expr)[$start: expr ;]) => (
&mut $slice[$start..]
);
(($slice : expr)[; $end : expr]) => (
&mut $slice[..$end]
);
}
#[cfg(feature="unsafe")]
#[allow(unused_unsafe)]
macro_rules! fast_ref {
(($slice : expr)[$index: expr]) => (
unsafe{$slice.get_unchecked($index)}
);
}
#[cfg(feature="unsafe")]
macro_rules! fast_inner {
(($slice : expr)[$index: expr]) => (
*$slice.get_unchecked($index)
);
}
#[cfg(feature="unsafe")]
macro_rules! fast {
(($slice : expr)[$index: expr]) => (
unsafe{*$slice.get_unchecked($index)}
);
(($slice : expr)[$start: expr ; $end : expr]) => (
unsafe{::core::slice::from_raw_parts(($slice).as_ptr().offset($start as isize),
$end - $start)};
);
(($slice : expr)[$start: expr ;]) => (
unsafe{::core::slice::from_raw_parts(($slice).as_ptr().offset($start as isize),
$slice.len() - $start)};
);
(($slice : expr)[; $end : expr]) => (
unsafe{::core::slice::from_raw_parts(($slice).as_ptr(), $slice.len())};
);
}
macro_rules! fast_slice {
(($slice : expr)[$index: expr]) => (
fast!(($slice.slice())[$index])
);
(($slice : expr)[$index: expr;]) => (
fast!(($slice.slice())[$index;])
);
(($slice : expr)[$start :expr; $end: expr]) => (
fast!(($slice.slice())[$start;$end])
);
}
macro_rules! fast_slice_mut {
(($slice : expr)[$index: expr]) => (
fast_mut!(($slice.slice_mut())[$index])
);
(($slice : expr)[$index: expr;]) => (
fast_mut!(($slice.slice_mut())[$index;])
);
(($slice : expr)[$start :expr;$end: expr]) => (
fast_mut!(($slice.slice_mut())[$start;$end])
);
}
#[cfg(feature="unsafe")]
macro_rules! fast_mut {
(($slice : expr)[$index: expr]) => (
*unsafe{$slice.get_unchecked_mut($index)}
);
(($slice : expr)[$start: expr ; $end : expr]) => (
unsafe{::core::slice::from_raw_parts_mut(($slice).as_mut_ptr().offset($start as isize),
$end - $start)};
);
(($slice : expr)[$start: expr ;]) => (
unsafe{::core::slice::from_raw_parts_mut(($slice).as_mut_ptr().offset($start as isize),
$slice.len() - $start)};
);
(($slice : expr)[; $end : expr]) => (
unsafe{::core::slice::from_raw_parts_mut(($slice).as_mut_ptr(), $slice.len())};
);
}
#[cfg(feature="unsafe")]
macro_rules! fast_uninitialized {
($size : expr ) => (unsafe{::core::mem::uninitialized()});
($def_value : expr ; $size : expr ) => (unsafe{::core::mem::uninitialized()});
}