auto merge of #12822 : erickt/rust/cleanup, r=acrichto
This PR makes `std::io::FileStat` hashable, and `Path` serializable as a byte array.
This commit is contained in:
commit
e86e1d88b2
5 changed files with 39 additions and 10 deletions
|
@ -14,6 +14,7 @@
|
||||||
Core encoding and decoding interfaces.
|
Core encoding and decoding interfaces.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use std::path;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::vec;
|
use std::vec;
|
||||||
use std::vec_ng::Vec;
|
use std::vec_ng::Vec;
|
||||||
|
@ -625,6 +626,32 @@ impl<
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<E: Encoder> Encodable<E> for path::posix::Path {
|
||||||
|
fn encode(&self, e: &mut E) {
|
||||||
|
self.as_vec().encode(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<D: Decoder> Decodable<D> for path::posix::Path {
|
||||||
|
fn decode(d: &mut D) -> path::posix::Path {
|
||||||
|
let bytes: ~[u8] = Decodable::decode(d);
|
||||||
|
path::posix::Path::new(bytes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<E: Encoder> Encodable<E> for path::windows::Path {
|
||||||
|
fn encode(&self, e: &mut E) {
|
||||||
|
self.as_vec().encode(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<D: Decoder> Decodable<D> for path::windows::Path {
|
||||||
|
fn decode(d: &mut D) -> path::windows::Path {
|
||||||
|
let bytes: ~[u8] = Decodable::decode(d);
|
||||||
|
path::windows::Path::new(bytes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ___________________________________________________________________________
|
// ___________________________________________________________________________
|
||||||
// Helper routines
|
// Helper routines
|
||||||
//
|
//
|
||||||
|
|
|
@ -1320,7 +1320,7 @@ pub enum FileAccess {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Different kinds of files which can be identified by a call to stat
|
/// Different kinds of files which can be identified by a call to stat
|
||||||
#[deriving(Eq, Show)]
|
#[deriving(Eq, Show, Hash)]
|
||||||
pub enum FileType {
|
pub enum FileType {
|
||||||
/// This is a normal file, corresponding to `S_IFREG`
|
/// This is a normal file, corresponding to `S_IFREG`
|
||||||
TypeFile,
|
TypeFile,
|
||||||
|
@ -1358,6 +1358,7 @@ pub enum FileType {
|
||||||
/// println!("byte size: {}", info.size);
|
/// println!("byte size: {}", info.size);
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
|
#[deriving(Hash)]
|
||||||
pub struct FileStat {
|
pub struct FileStat {
|
||||||
/// The path that this stat structure is describing
|
/// The path that this stat structure is describing
|
||||||
path: Path,
|
path: Path,
|
||||||
|
@ -1399,6 +1400,7 @@ pub struct FileStat {
|
||||||
/// have different meanings or no meaning at all on some platforms.
|
/// have different meanings or no meaning at all on some platforms.
|
||||||
#[unstable]
|
#[unstable]
|
||||||
#[allow(missing_doc)]
|
#[allow(missing_doc)]
|
||||||
|
#[deriving(Hash)]
|
||||||
pub struct UnstableFileStat {
|
pub struct UnstableFileStat {
|
||||||
device: u64,
|
device: u64,
|
||||||
inode: u64,
|
inode: u64,
|
||||||
|
|
|
@ -88,10 +88,10 @@ impl ToCStr for Path {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<H: Writer> ::hash::Hash<H> for Path {
|
impl<S: Writer> ::hash::Hash<S> for Path {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn hash(&self, hasher: &mut H) {
|
fn hash(&self, state: &mut S) {
|
||||||
self.repr.hash(hasher)
|
self.repr.hash(state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,10 +112,10 @@ impl ToCStr for Path {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<H: Writer> ::hash::Hash<H> for Path {
|
impl<S: Writer> ::hash::Hash<S> for Path {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn hash(&self, hasher: &mut H) {
|
fn hash(&self, state: &mut S) {
|
||||||
self.repr.hash(hasher)
|
self.repr.hash(state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,12 +24,12 @@ pub fn expand_deriving_hash(cx: &mut ExtCtxt,
|
||||||
|
|
||||||
let (path, generics, args) = if cx.ecfg.deriving_hash_type_parameter {
|
let (path, generics, args) = if cx.ecfg.deriving_hash_type_parameter {
|
||||||
(Path::new_(vec!("std", "hash", "Hash"), None,
|
(Path::new_(vec!("std", "hash", "Hash"), None,
|
||||||
vec!(~Literal(Path::new_local("__H"))), true),
|
vec!(~Literal(Path::new_local("__S"))), true),
|
||||||
LifetimeBounds {
|
LifetimeBounds {
|
||||||
lifetimes: Vec::new(),
|
lifetimes: Vec::new(),
|
||||||
bounds: vec!(("__H", vec!(Path::new(vec!("std", "io", "Writer"))))),
|
bounds: vec!(("__S", vec!(Path::new(vec!("std", "io", "Writer"))))),
|
||||||
},
|
},
|
||||||
Path::new_local("__H"))
|
Path::new_local("__S"))
|
||||||
} else {
|
} else {
|
||||||
(Path::new(vec!("std", "hash", "Hash")),
|
(Path::new(vec!("std", "hash", "Hash")),
|
||||||
LifetimeBounds::empty(),
|
LifetimeBounds::empty(),
|
||||||
|
|
Loading…
Add table
Reference in a new issue