make macros non-capturing
This commit is contained in:
@@ -185,7 +185,7 @@ impl<K: Ord, V> TreeMap<K, V> {
|
|||||||
|
|
||||||
macro_rules! bound_setup {
|
macro_rules! bound_setup {
|
||||||
// initialiser of the iterator to manipulate
|
// initialiser of the iterator to manipulate
|
||||||
($iter:expr,
|
($iter:expr, $k:expr,
|
||||||
// whether we are looking for the lower or upper bound.
|
// whether we are looking for the lower or upper bound.
|
||||||
$is_lower_bound:expr) => {
|
$is_lower_bound:expr) => {
|
||||||
{
|
{
|
||||||
@@ -193,7 +193,7 @@ macro_rules! bound_setup {
|
|||||||
loop {
|
loop {
|
||||||
if !iter.node.is_null() {
|
if !iter.node.is_null() {
|
||||||
let node_k = unsafe {&(*iter.node).key};
|
let node_k = unsafe {&(*iter.node).key};
|
||||||
match k.cmp(node_k) {
|
match $k.cmp(node_k) {
|
||||||
Less => iter.traverse_left(),
|
Less => iter.traverse_left(),
|
||||||
Greater => iter.traverse_right(),
|
Greater => iter.traverse_right(),
|
||||||
Equal => {
|
Equal => {
|
||||||
@@ -230,13 +230,13 @@ impl<K: Ord, V> TreeMap<K, V> {
|
|||||||
/// Return a lazy iterator to the first key-value pair whose key is not less than `k`
|
/// Return a lazy iterator to the first key-value pair whose key is not less than `k`
|
||||||
/// If all keys in map are less than `k` an empty iterator is returned.
|
/// If all keys in map are less than `k` an empty iterator is returned.
|
||||||
pub fn lower_bound<'a>(&'a self, k: &K) -> Entries<'a, K, V> {
|
pub fn lower_bound<'a>(&'a self, k: &K) -> Entries<'a, K, V> {
|
||||||
bound_setup!(self.iter_for_traversal(), true)
|
bound_setup!(self.iter_for_traversal(), k, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a lazy iterator to the first key-value pair whose key is greater than `k`
|
/// Return a lazy iterator to the first key-value pair whose key is greater than `k`
|
||||||
/// If all keys in map are not greater than `k` an empty iterator is returned.
|
/// If all keys in map are not greater than `k` an empty iterator is returned.
|
||||||
pub fn upper_bound<'a>(&'a self, k: &K) -> Entries<'a, K, V> {
|
pub fn upper_bound<'a>(&'a self, k: &K) -> Entries<'a, K, V> {
|
||||||
bound_setup!(self.iter_for_traversal(), false)
|
bound_setup!(self.iter_for_traversal(), k, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get a lazy iterator that should be initialized using
|
/// Get a lazy iterator that should be initialized using
|
||||||
@@ -256,7 +256,7 @@ impl<K: Ord, V> TreeMap<K, V> {
|
|||||||
/// If all keys in map are less than `k` an empty iterator is
|
/// If all keys in map are less than `k` an empty iterator is
|
||||||
/// returned.
|
/// returned.
|
||||||
pub fn mut_lower_bound<'a>(&'a mut self, k: &K) -> MutEntries<'a, K, V> {
|
pub fn mut_lower_bound<'a>(&'a mut self, k: &K) -> MutEntries<'a, K, V> {
|
||||||
bound_setup!(self.mut_iter_for_traversal(), true)
|
bound_setup!(self.mut_iter_for_traversal(), k, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a lazy iterator to the first key-value pair (with the
|
/// Return a lazy iterator to the first key-value pair (with the
|
||||||
@@ -265,7 +265,7 @@ impl<K: Ord, V> TreeMap<K, V> {
|
|||||||
/// If all keys in map are not greater than `k` an empty iterator
|
/// If all keys in map are not greater than `k` an empty iterator
|
||||||
/// is returned.
|
/// is returned.
|
||||||
pub fn mut_upper_bound<'a>(&'a mut self, k: &K) -> MutEntries<'a, K, V> {
|
pub fn mut_upper_bound<'a>(&'a mut self, k: &K) -> MutEntries<'a, K, V> {
|
||||||
bound_setup!(self.mut_iter_for_traversal(), false)
|
bound_setup!(self.mut_iter_for_traversal(), k, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -769,16 +769,16 @@ pub trait ToPrimitive {
|
|||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! impl_to_primitive_int_to_int(
|
macro_rules! impl_to_primitive_int_to_int(
|
||||||
($SrcT:ty, $DstT:ty) => (
|
($SrcT:ty, $DstT:ty, $slf:expr) => (
|
||||||
{
|
{
|
||||||
if size_of::<$SrcT>() <= size_of::<$DstT>() {
|
if size_of::<$SrcT>() <= size_of::<$DstT>() {
|
||||||
Some(*self as $DstT)
|
Some($slf as $DstT)
|
||||||
} else {
|
} else {
|
||||||
let n = *self as i64;
|
let n = $slf as i64;
|
||||||
let min_value: $DstT = Bounded::min_value();
|
let min_value: $DstT = Bounded::min_value();
|
||||||
let max_value: $DstT = Bounded::max_value();
|
let max_value: $DstT = Bounded::max_value();
|
||||||
if min_value as i64 <= n && n <= max_value as i64 {
|
if min_value as i64 <= n && n <= max_value as i64 {
|
||||||
Some(*self as $DstT)
|
Some($slf as $DstT)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -788,12 +788,12 @@ macro_rules! impl_to_primitive_int_to_int(
|
|||||||
)
|
)
|
||||||
|
|
||||||
macro_rules! impl_to_primitive_int_to_uint(
|
macro_rules! impl_to_primitive_int_to_uint(
|
||||||
($SrcT:ty, $DstT:ty) => (
|
($SrcT:ty, $DstT:ty, $slf:expr) => (
|
||||||
{
|
{
|
||||||
let zero: $SrcT = Zero::zero();
|
let zero: $SrcT = Zero::zero();
|
||||||
let max_value: $DstT = Bounded::max_value();
|
let max_value: $DstT = Bounded::max_value();
|
||||||
if zero <= *self && *self as u64 <= max_value as u64 {
|
if zero <= $slf && $slf as u64 <= max_value as u64 {
|
||||||
Some(*self as $DstT)
|
Some($slf as $DstT)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -805,26 +805,26 @@ macro_rules! impl_to_primitive_int(
|
|||||||
($T:ty) => (
|
($T:ty) => (
|
||||||
impl ToPrimitive for $T {
|
impl ToPrimitive for $T {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_int(&self) -> Option<int> { impl_to_primitive_int_to_int!($T, int) }
|
fn to_int(&self) -> Option<int> { impl_to_primitive_int_to_int!($T, int, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_i8(&self) -> Option<i8> { impl_to_primitive_int_to_int!($T, i8) }
|
fn to_i8(&self) -> Option<i8> { impl_to_primitive_int_to_int!($T, i8, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_i16(&self) -> Option<i16> { impl_to_primitive_int_to_int!($T, i16) }
|
fn to_i16(&self) -> Option<i16> { impl_to_primitive_int_to_int!($T, i16, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_i32(&self) -> Option<i32> { impl_to_primitive_int_to_int!($T, i32) }
|
fn to_i32(&self) -> Option<i32> { impl_to_primitive_int_to_int!($T, i32, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_i64(&self) -> Option<i64> { impl_to_primitive_int_to_int!($T, i64) }
|
fn to_i64(&self) -> Option<i64> { impl_to_primitive_int_to_int!($T, i64, *self) }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_uint(&self) -> Option<uint> { impl_to_primitive_int_to_uint!($T, uint) }
|
fn to_uint(&self) -> Option<uint> { impl_to_primitive_int_to_uint!($T, uint, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_u8(&self) -> Option<u8> { impl_to_primitive_int_to_uint!($T, u8) }
|
fn to_u8(&self) -> Option<u8> { impl_to_primitive_int_to_uint!($T, u8, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_u16(&self) -> Option<u16> { impl_to_primitive_int_to_uint!($T, u16) }
|
fn to_u16(&self) -> Option<u16> { impl_to_primitive_int_to_uint!($T, u16, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_u32(&self) -> Option<u32> { impl_to_primitive_int_to_uint!($T, u32) }
|
fn to_u32(&self) -> Option<u32> { impl_to_primitive_int_to_uint!($T, u32, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_u64(&self) -> Option<u64> { impl_to_primitive_int_to_uint!($T, u64) }
|
fn to_u64(&self) -> Option<u64> { impl_to_primitive_int_to_uint!($T, u64, *self) }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_f32(&self) -> Option<f32> { Some(*self as f32) }
|
fn to_f32(&self) -> Option<f32> { Some(*self as f32) }
|
||||||
@@ -841,11 +841,11 @@ impl_to_primitive_int!(i32)
|
|||||||
impl_to_primitive_int!(i64)
|
impl_to_primitive_int!(i64)
|
||||||
|
|
||||||
macro_rules! impl_to_primitive_uint_to_int(
|
macro_rules! impl_to_primitive_uint_to_int(
|
||||||
($DstT:ty) => (
|
($DstT:ty, $slf:expr) => (
|
||||||
{
|
{
|
||||||
let max_value: $DstT = Bounded::max_value();
|
let max_value: $DstT = Bounded::max_value();
|
||||||
if *self as u64 <= max_value as u64 {
|
if $slf as u64 <= max_value as u64 {
|
||||||
Some(*self as $DstT)
|
Some($slf as $DstT)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -854,15 +854,15 @@ macro_rules! impl_to_primitive_uint_to_int(
|
|||||||
)
|
)
|
||||||
|
|
||||||
macro_rules! impl_to_primitive_uint_to_uint(
|
macro_rules! impl_to_primitive_uint_to_uint(
|
||||||
($SrcT:ty, $DstT:ty) => (
|
($SrcT:ty, $DstT:ty, $slf:expr) => (
|
||||||
{
|
{
|
||||||
if size_of::<$SrcT>() <= size_of::<$DstT>() {
|
if size_of::<$SrcT>() <= size_of::<$DstT>() {
|
||||||
Some(*self as $DstT)
|
Some($slf as $DstT)
|
||||||
} else {
|
} else {
|
||||||
let zero: $SrcT = Zero::zero();
|
let zero: $SrcT = Zero::zero();
|
||||||
let max_value: $DstT = Bounded::max_value();
|
let max_value: $DstT = Bounded::max_value();
|
||||||
if zero <= *self && *self as u64 <= max_value as u64 {
|
if zero <= $slf && $slf as u64 <= max_value as u64 {
|
||||||
Some(*self as $DstT)
|
Some($slf as $DstT)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -875,26 +875,26 @@ macro_rules! impl_to_primitive_uint(
|
|||||||
($T:ty) => (
|
($T:ty) => (
|
||||||
impl ToPrimitive for $T {
|
impl ToPrimitive for $T {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_int(&self) -> Option<int> { impl_to_primitive_uint_to_int!(int) }
|
fn to_int(&self) -> Option<int> { impl_to_primitive_uint_to_int!(int, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_i8(&self) -> Option<i8> { impl_to_primitive_uint_to_int!(i8) }
|
fn to_i8(&self) -> Option<i8> { impl_to_primitive_uint_to_int!(i8, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_i16(&self) -> Option<i16> { impl_to_primitive_uint_to_int!(i16) }
|
fn to_i16(&self) -> Option<i16> { impl_to_primitive_uint_to_int!(i16, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_i32(&self) -> Option<i32> { impl_to_primitive_uint_to_int!(i32) }
|
fn to_i32(&self) -> Option<i32> { impl_to_primitive_uint_to_int!(i32, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_i64(&self) -> Option<i64> { impl_to_primitive_uint_to_int!(i64) }
|
fn to_i64(&self) -> Option<i64> { impl_to_primitive_uint_to_int!(i64, *self) }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_uint(&self) -> Option<uint> { impl_to_primitive_uint_to_uint!($T, uint) }
|
fn to_uint(&self) -> Option<uint> { impl_to_primitive_uint_to_uint!($T, uint, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_u8(&self) -> Option<u8> { impl_to_primitive_uint_to_uint!($T, u8) }
|
fn to_u8(&self) -> Option<u8> { impl_to_primitive_uint_to_uint!($T, u8, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_u16(&self) -> Option<u16> { impl_to_primitive_uint_to_uint!($T, u16) }
|
fn to_u16(&self) -> Option<u16> { impl_to_primitive_uint_to_uint!($T, u16, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_u32(&self) -> Option<u32> { impl_to_primitive_uint_to_uint!($T, u32) }
|
fn to_u32(&self) -> Option<u32> { impl_to_primitive_uint_to_uint!($T, u32, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_u64(&self) -> Option<u64> { impl_to_primitive_uint_to_uint!($T, u64) }
|
fn to_u64(&self) -> Option<u64> { impl_to_primitive_uint_to_uint!($T, u64, *self) }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_f32(&self) -> Option<f32> { Some(*self as f32) }
|
fn to_f32(&self) -> Option<f32> { Some(*self as f32) }
|
||||||
@@ -911,14 +911,14 @@ impl_to_primitive_uint!(u32)
|
|||||||
impl_to_primitive_uint!(u64)
|
impl_to_primitive_uint!(u64)
|
||||||
|
|
||||||
macro_rules! impl_to_primitive_float_to_float(
|
macro_rules! impl_to_primitive_float_to_float(
|
||||||
($SrcT:ty, $DstT:ty) => (
|
($SrcT:ty, $DstT:ty, $slf:expr) => (
|
||||||
if size_of::<$SrcT>() <= size_of::<$DstT>() {
|
if size_of::<$SrcT>() <= size_of::<$DstT>() {
|
||||||
Some(*self as $DstT)
|
Some($slf as $DstT)
|
||||||
} else {
|
} else {
|
||||||
let n = *self as f64;
|
let n = $slf as f64;
|
||||||
let max_value: $SrcT = Bounded::max_value();
|
let max_value: $SrcT = Bounded::max_value();
|
||||||
if -max_value as f64 <= n && n <= max_value as f64 {
|
if -max_value as f64 <= n && n <= max_value as f64 {
|
||||||
Some(*self as $DstT)
|
Some($slf as $DstT)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -952,9 +952,9 @@ macro_rules! impl_to_primitive_float(
|
|||||||
fn to_u64(&self) -> Option<u64> { Some(*self as u64) }
|
fn to_u64(&self) -> Option<u64> { Some(*self as u64) }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_f32(&self) -> Option<f32> { impl_to_primitive_float_to_float!($T, f32) }
|
fn to_f32(&self) -> Option<f32> { impl_to_primitive_float_to_float!($T, f32, *self) }
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_f64(&self) -> Option<f64> { impl_to_primitive_float_to_float!($T, f64) }
|
fn to_f64(&self) -> Option<f64> { impl_to_primitive_float_to_float!($T, f64, *self) }
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -1104,38 +1104,38 @@ pub fn from_f64<A: FromPrimitive>(n: f64) -> Option<A> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! impl_from_primitive(
|
macro_rules! impl_from_primitive(
|
||||||
($T:ty, $to_ty:expr) => (
|
($T:ty, $to_ty:ident) => (
|
||||||
impl FromPrimitive for $T {
|
impl FromPrimitive for $T {
|
||||||
#[inline] fn from_int(n: int) -> Option<$T> { $to_ty }
|
#[inline] fn from_int(n: int) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_i8(n: i8) -> Option<$T> { $to_ty }
|
#[inline] fn from_i8(n: i8) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_i16(n: i16) -> Option<$T> { $to_ty }
|
#[inline] fn from_i16(n: i16) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_i32(n: i32) -> Option<$T> { $to_ty }
|
#[inline] fn from_i32(n: i32) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_i64(n: i64) -> Option<$T> { $to_ty }
|
#[inline] fn from_i64(n: i64) -> Option<$T> { n.$to_ty() }
|
||||||
|
|
||||||
#[inline] fn from_uint(n: uint) -> Option<$T> { $to_ty }
|
#[inline] fn from_uint(n: uint) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_u8(n: u8) -> Option<$T> { $to_ty }
|
#[inline] fn from_u8(n: u8) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_u16(n: u16) -> Option<$T> { $to_ty }
|
#[inline] fn from_u16(n: u16) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_u32(n: u32) -> Option<$T> { $to_ty }
|
#[inline] fn from_u32(n: u32) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_u64(n: u64) -> Option<$T> { $to_ty }
|
#[inline] fn from_u64(n: u64) -> Option<$T> { n.$to_ty() }
|
||||||
|
|
||||||
#[inline] fn from_f32(n: f32) -> Option<$T> { $to_ty }
|
#[inline] fn from_f32(n: f32) -> Option<$T> { n.$to_ty() }
|
||||||
#[inline] fn from_f64(n: f64) -> Option<$T> { $to_ty }
|
#[inline] fn from_f64(n: f64) -> Option<$T> { n.$to_ty() }
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
impl_from_primitive!(int, n.to_int())
|
impl_from_primitive!(int, to_int)
|
||||||
impl_from_primitive!(i8, n.to_i8())
|
impl_from_primitive!(i8, to_i8)
|
||||||
impl_from_primitive!(i16, n.to_i16())
|
impl_from_primitive!(i16, to_i16)
|
||||||
impl_from_primitive!(i32, n.to_i32())
|
impl_from_primitive!(i32, to_i32)
|
||||||
impl_from_primitive!(i64, n.to_i64())
|
impl_from_primitive!(i64, to_i64)
|
||||||
impl_from_primitive!(uint, n.to_uint())
|
impl_from_primitive!(uint, to_uint)
|
||||||
impl_from_primitive!(u8, n.to_u8())
|
impl_from_primitive!(u8, to_u8)
|
||||||
impl_from_primitive!(u16, n.to_u16())
|
impl_from_primitive!(u16, to_u16)
|
||||||
impl_from_primitive!(u32, n.to_u32())
|
impl_from_primitive!(u32, to_u32)
|
||||||
impl_from_primitive!(u64, n.to_u64())
|
impl_from_primitive!(u64, to_u64)
|
||||||
impl_from_primitive!(f32, n.to_f32())
|
impl_from_primitive!(f32, to_f32)
|
||||||
impl_from_primitive!(f64, n.to_f64())
|
impl_from_primitive!(f64, to_f64)
|
||||||
|
|
||||||
/// Cast from one machine scalar to another.
|
/// Cast from one machine scalar to another.
|
||||||
///
|
///
|
||||||
|
|||||||
Reference in New Issue
Block a user