@@ -6,37 +6,37 @@ use std::ops::{Deref, DerefMut};
6
6
use std:: slice;
7
7
8
8
#[ repr( C ) ]
9
- pub struct Buffer < T : Copy > {
10
- data : * mut T ,
9
+ pub struct Buffer {
10
+ data : * mut u8 ,
11
11
len : usize ,
12
12
capacity : usize ,
13
- reserve : extern "C" fn ( Buffer < T > , usize ) -> Buffer < T > ,
14
- drop : extern "C" fn ( Buffer < T > ) ,
13
+ reserve : extern "C" fn ( Buffer , usize ) -> Buffer ,
14
+ drop : extern "C" fn ( Buffer ) ,
15
15
}
16
16
17
- unsafe impl < T : Copy + Sync > Sync for Buffer < T > { }
18
- unsafe impl < T : Copy + Send > Send for Buffer < T > { }
17
+ unsafe impl Sync for Buffer { }
18
+ unsafe impl Send for Buffer { }
19
19
20
- impl < T : Copy > Default for Buffer < T > {
20
+ impl Default for Buffer {
21
21
fn default ( ) -> Self {
22
22
Self :: from ( vec ! [ ] )
23
23
}
24
24
}
25
25
26
- impl < T : Copy > Deref for Buffer < T > {
27
- type Target = [ T ] ;
28
- fn deref ( & self ) -> & [ T ] {
29
- unsafe { slice:: from_raw_parts ( self . data as * const T , self . len ) }
26
+ impl Deref for Buffer {
27
+ type Target = [ u8 ] ;
28
+ fn deref ( & self ) -> & [ u8 ] {
29
+ unsafe { slice:: from_raw_parts ( self . data as * const u8 , self . len ) }
30
30
}
31
31
}
32
32
33
- impl < T : Copy > DerefMut for Buffer < T > {
34
- fn deref_mut ( & mut self ) -> & mut [ T ] {
33
+ impl DerefMut for Buffer {
34
+ fn deref_mut ( & mut self ) -> & mut [ u8 ] {
35
35
unsafe { slice:: from_raw_parts_mut ( self . data , self . len ) }
36
36
}
37
37
}
38
38
39
- impl < T : Copy > Buffer < T > {
39
+ impl Buffer {
40
40
pub ( super ) fn new ( ) -> Self {
41
41
Self :: default ( )
42
42
}
@@ -53,7 +53,7 @@ impl<T: Copy> Buffer<T> {
53
53
// because in the case of small arrays, codegen can be more efficient
54
54
// (avoiding a memmove call). With extend_from_slice, LLVM at least
55
55
// currently is not able to make that optimization.
56
- pub ( super ) fn extend_from_array < const N : usize > ( & mut self , xs : & [ T ; N ] ) {
56
+ pub ( super ) fn extend_from_array < const N : usize > ( & mut self , xs : & [ u8 ; N ] ) {
57
57
if xs. len ( ) > ( self . capacity - self . len ) {
58
58
let b = self . take ( ) ;
59
59
* self = ( b. reserve ) ( b, xs. len ( ) ) ;
@@ -64,7 +64,7 @@ impl<T: Copy> Buffer<T> {
64
64
}
65
65
}
66
66
67
- pub ( super ) fn extend_from_slice ( & mut self , xs : & [ T ] ) {
67
+ pub ( super ) fn extend_from_slice ( & mut self , xs : & [ u8 ] ) {
68
68
if xs. len ( ) > ( self . capacity - self . len ) {
69
69
let b = self . take ( ) ;
70
70
* self = ( b. reserve ) ( b, xs. len ( ) ) ;
@@ -75,7 +75,7 @@ impl<T: Copy> Buffer<T> {
75
75
}
76
76
}
77
77
78
- pub ( super ) fn push ( & mut self , v : T ) {
78
+ pub ( super ) fn push ( & mut self , v : u8 ) {
79
79
// The code here is taken from Vec::push, and we know that reserve()
80
80
// will panic if we're exceeding isize::MAX bytes and so there's no need
81
81
// to check for overflow.
@@ -90,7 +90,7 @@ impl<T: Copy> Buffer<T> {
90
90
}
91
91
}
92
92
93
- impl Write for Buffer < u8 > {
93
+ impl Write for Buffer {
94
94
fn write ( & mut self , xs : & [ u8 ] ) -> io:: Result < usize > {
95
95
self . extend_from_slice ( xs) ;
96
96
Ok ( xs. len ( ) )
@@ -106,35 +106,35 @@ impl Write for Buffer<u8> {
106
106
}
107
107
}
108
108
109
- impl < T : Copy > Drop for Buffer < T > {
109
+ impl Drop for Buffer {
110
110
fn drop ( & mut self ) {
111
111
let b = self . take ( ) ;
112
112
( b. drop ) ( b) ;
113
113
}
114
114
}
115
115
116
- impl < T : Copy > From < Vec < T > > for Buffer < T > {
117
- fn from ( mut v : Vec < T > ) -> Self {
116
+ impl From < Vec < u8 > > for Buffer {
117
+ fn from ( mut v : Vec < u8 > ) -> Self {
118
118
let ( data, len, capacity) = ( v. as_mut_ptr ( ) , v. len ( ) , v. capacity ( ) ) ;
119
119
mem:: forget ( v) ;
120
120
121
121
// This utility function is nested in here because it can *only*
122
122
// be safely called on `Buffer`s created by *this* `proc_macro`.
123
- fn to_vec < T : Copy > ( b : Buffer < T > ) -> Vec < T > {
123
+ fn to_vec ( b : Buffer ) -> Vec < u8 > {
124
124
unsafe {
125
125
let Buffer { data, len, capacity, .. } = b;
126
126
mem:: forget ( b) ;
127
127
Vec :: from_raw_parts ( data, len, capacity)
128
128
}
129
129
}
130
130
131
- extern "C" fn reserve < T : Copy > ( b : Buffer < T > , additional : usize ) -> Buffer < T > {
131
+ extern "C" fn reserve ( b : Buffer , additional : usize ) -> Buffer {
132
132
let mut v = to_vec ( b) ;
133
133
v. reserve ( additional) ;
134
134
Buffer :: from ( v)
135
135
}
136
136
137
- extern "C" fn drop < T : Copy > ( b : Buffer < T > ) {
137
+ extern "C" fn drop ( b : Buffer ) {
138
138
mem:: drop ( to_vec ( b) ) ;
139
139
}
140
140
0 commit comments