- [windows_handle](library-features/windows-handle.md)
- [windows_net](library-features/windows-net.md)
- [windows_stdio](library-features/windows-stdio.md)
- - [zero_one](library-features/zero-one.md)
->>>>>> Add top level sections to the Unstable Book.
+++ /dev/null
-# `zero_one`
-
-The tracking issue for this feature is: [#27739]
-
-[#27739]: https://github.com/rust-lang/rust/issues/27739
-
-------------------------
// FIXME: #6220 Implement floating point formatting
use fmt;
-use num::Zero;
use ops::{Div, Rem, Sub};
use str;
use slice;
use mem;
#[doc(hidden)]
-trait Int: Zero + PartialEq + PartialOrd + Div<Output=Self> + Rem<Output=Self> +
+trait Int: PartialEq + PartialOrd + Div<Output=Self> + Rem<Output=Self> +
Sub<Output=Self> + Copy {
+ fn zero() -> Self;
fn from_u8(u: u8) -> Self;
fn to_u8(&self) -> u8;
fn to_u16(&self) -> u16;
macro_rules! doit {
($($t:ident)*) => ($(impl Int for $t {
+ fn zero() -> $t { 0 }
fn from_u8(u: u8) -> $t { u as $t }
fn to_u8(&self) -> u8 { *self as u8 }
fn to_u16(&self) -> u16 { *self as u16 }
pub mod bignum;
pub mod diy_float;
-/// Types that have a "zero" value.
-///
-/// This trait is intended for use in conjunction with `Add`, as an identity:
-/// `x + T::zero() == x`.
-#[unstable(feature = "zero_one",
- reason = "unsure of placement, wants to use associated constants",
- issue = "27739")]
-#[rustc_deprecated(since = "1.11.0", reason = "no longer used for \
- Iterator::sum")]
-pub trait Zero: Sized {
- /// The "zero" (usually, additive identity) for this type.
- fn zero() -> Self;
-}
-
-/// Types that have a "one" value.
-///
-/// This trait is intended for use in conjunction with `Mul`, as an identity:
-/// `x * T::one() == x`.
-#[unstable(feature = "zero_one",
- reason = "unsure of placement, wants to use associated constants",
- issue = "27739")]
-#[rustc_deprecated(since = "1.11.0", reason = "no longer used for \
- Iterator::product")]
-pub trait One: Sized {
- /// The "one" (usually, multiplicative identity) for this type.
- fn one() -> Self;
-}
-
-macro_rules! zero_one_impl {
- ($($t:ty)*) => ($(
- #[unstable(feature = "zero_one",
- reason = "unsure of placement, wants to use associated constants",
- issue = "27739")]
- #[allow(deprecated)]
- impl Zero for $t {
- #[inline]
- fn zero() -> Self { 0 }
- }
- #[unstable(feature = "zero_one",
- reason = "unsure of placement, wants to use associated constants",
- issue = "27739")]
- #[allow(deprecated)]
- impl One for $t {
- #[inline]
- fn one() -> Self { 1 }
- }
- )*)
-}
-zero_one_impl! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize }
-
-macro_rules! zero_one_impl_float {
- ($($t:ty)*) => ($(
- #[unstable(feature = "zero_one",
- reason = "unsure of placement, wants to use associated constants",
- issue = "27739")]
- #[allow(deprecated)]
- impl Zero for $t {
- #[inline]
- fn zero() -> Self { 0.0 }
- }
- #[unstable(feature = "zero_one",
- reason = "unsure of placement, wants to use associated constants",
- issue = "27739")]
- #[allow(deprecated)]
- impl One for $t {
- #[inline]
- fn one() -> Self { 1.0 }
- }
- )*)
-}
-zero_one_impl_float! { f32 f64 }
-
macro_rules! checked_op {
($U:ty, $op:path, $x:expr, $y:expr) => {{
let (result, overflowed) = unsafe { $op($x as $U, $y as $U) };
#![feature(untagged_unions)]
#![feature(unwind_attributes)]
#![feature(vec_push_all)]
-#![feature(zero_one)]
#![cfg_attr(test, feature(update_panic_count))]
#![cfg_attr(stage0, feature(pub_restricted))]
#![cfg_attr(test, feature(float_bits_conv))]
#![stable(feature = "rust1", since = "1.0.0")]
#![allow(missing_docs)]
-#[stable(feature = "rust1", since = "1.0.0")]
-#[allow(deprecated)]
-pub use core::num::{Zero, One};
#[stable(feature = "rust1", since = "1.0.0")]
pub use core::num::{FpCategory, ParseIntError, ParseFloatError, TryFromIntError};
#[stable(feature = "rust1", since = "1.0.0")]
// except according to those terms.
// ignore-emscripten no threads support
-#![feature(rustc_attrs, zero_one)]
+#![feature(rustc_attrs)]
-use std::num::Zero;
use std::thread;
+trait Int {
+ fn zero() -> Self;
+ fn one() -> Self;
+}
+macro_rules! doit {
+ ($($t:ident)*) => ($(impl Int for $t {
+ fn zero() -> $t { 0 }
+ fn one() -> $t { 1 }
+ })*)
+}
+doit! { i8 i16 i32 i64 isize }
+
macro_rules! check {
($($e:expr),*) => {
$(assert!(thread::spawn({
fn main() {
check![
- isize::min_value() / -1,
- i8::min_value() / -1,
- i16::min_value() / -1,
- i32::min_value() / -1,
- i64::min_value() / -1,
+ isize::min_value() / -isize::one(),
+ i8::min_value() / -i8::one(),
+ i16::min_value() / -i16::one(),
+ i32::min_value() / -i32::one(),
+ i64::min_value() / -i64::one(),
1isize / isize::zero(),
1i8 / i8::zero(),
1i16 / i16::zero(),
1i32 / i32::zero(),
1i64 / i64::zero(),
- isize::min_value() % -1,
- i8::min_value() % -1,
- i16::min_value() % -1,
- i32::min_value() % -1,
- i64::min_value() % -1,
+ isize::min_value() % -isize::one(),
+ i8::min_value() % -i8::one(),
+ i16::min_value() % -i16::one(),
+ i32::min_value() % -i32::one(),
+ i64::min_value() % -i64::one(),
1isize % isize::zero(),
1i8 % i8::zero(),
1i16 % i16::zero(),