@@ -6,37 +6,37 @@ use std::ops::{Deref, DerefMut};
66use std:: slice;
77
88#[ repr( C ) ]
9- pub struct Buffer < T : Copy > {
10- data : * mut T ,
9+ pub struct Buffer {
10+ data : * mut u8 ,
1111 len : usize ,
1212 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 ) ,
1515}
1616
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 { }
1919
20- impl < T : Copy > Default for Buffer < T > {
20+ impl Default for Buffer {
2121 fn default ( ) -> Self {
2222 Self :: from ( vec ! [ ] )
2323 }
2424}
2525
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 ) }
3030 }
3131}
3232
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 ] {
3535 unsafe { slice:: from_raw_parts_mut ( self . data , self . len ) }
3636 }
3737}
3838
39- impl < T : Copy > Buffer < T > {
39+ impl Buffer {
4040 pub ( super ) fn new ( ) -> Self {
4141 Self :: default ( )
4242 }
@@ -53,7 +53,7 @@ impl<T: Copy> Buffer<T> {
5353 // because in the case of small arrays, codegen can be more efficient
5454 // (avoiding a memmove call). With extend_from_slice, LLVM at least
5555 // 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 ] ) {
5757 if xs. len ( ) > ( self . capacity - self . len ) {
5858 let b = self . take ( ) ;
5959 * self = ( b. reserve ) ( b, xs. len ( ) ) ;
@@ -64,7 +64,7 @@ impl<T: Copy> Buffer<T> {
6464 }
6565 }
6666
67- pub ( super ) fn extend_from_slice ( & mut self , xs : & [ T ] ) {
67+ pub ( super ) fn extend_from_slice ( & mut self , xs : & [ u8 ] ) {
6868 if xs. len ( ) > ( self . capacity - self . len ) {
6969 let b = self . take ( ) ;
7070 * self = ( b. reserve ) ( b, xs. len ( ) ) ;
@@ -75,7 +75,7 @@ impl<T: Copy> Buffer<T> {
7575 }
7676 }
7777
78- pub ( super ) fn push ( & mut self , v : T ) {
78+ pub ( super ) fn push ( & mut self , v : u8 ) {
7979 // The code here is taken from Vec::push, and we know that reserve()
8080 // will panic if we're exceeding isize::MAX bytes and so there's no need
8181 // to check for overflow.
@@ -90,7 +90,7 @@ impl<T: Copy> Buffer<T> {
9090 }
9191}
9292
93- impl Write for Buffer < u8 > {
93+ impl Write for Buffer {
9494 fn write ( & mut self , xs : & [ u8 ] ) -> io:: Result < usize > {
9595 self . extend_from_slice ( xs) ;
9696 Ok ( xs. len ( ) )
@@ -106,35 +106,35 @@ impl Write for Buffer<u8> {
106106 }
107107}
108108
109- impl < T : Copy > Drop for Buffer < T > {
109+ impl Drop for Buffer {
110110 fn drop ( & mut self ) {
111111 let b = self . take ( ) ;
112112 ( b. drop ) ( b) ;
113113 }
114114}
115115
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 {
118118 let ( data, len, capacity) = ( v. as_mut_ptr ( ) , v. len ( ) , v. capacity ( ) ) ;
119119 mem:: forget ( v) ;
120120
121121 // This utility function is nested in here because it can *only*
122122 // 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 > {
124124 unsafe {
125125 let Buffer { data, len, capacity, .. } = b;
126126 mem:: forget ( b) ;
127127 Vec :: from_raw_parts ( data, len, capacity)
128128 }
129129 }
130130
131- extern "C" fn reserve < T : Copy > ( b : Buffer < T > , additional : usize ) -> Buffer < T > {
131+ extern "C" fn reserve ( b : Buffer , additional : usize ) -> Buffer {
132132 let mut v = to_vec ( b) ;
133133 v. reserve ( additional) ;
134134 Buffer :: from ( v)
135135 }
136136
137- extern "C" fn drop < T : Copy > ( b : Buffer < T > ) {
137+ extern "C" fn drop ( b : Buffer ) {
138138 mem:: drop ( to_vec ( b) ) ;
139139 }
140140
0 commit comments