Fix dimensionality of Au

Previously, we implemented:

Au * Au -> Au
Au / Au -> Au
Au % Au -> Au

... which are inconsistent. It should be:

Au * Au -> SquaredAu
Au / Au -> i32
Au % Au -> i32

or:

Au * i32 -> Au
Au / i32 -> Au
Au % i32 -> Au

I picked the latter.

Also, the multiplicative identity does not make sense
when multiplication take two different types.
This commit is contained in:
Simon Sapin 2014-09-19 13:54:57 +01:00
parent 2652d223f5
commit 415bbaeb2e
2 changed files with 11 additions and 21 deletions

View file

@ -273,7 +273,7 @@ impl Flow for TableFlow {
*col_inline_size = (*col_inline_size).scale_by(ratio); *col_inline_size = (*col_inline_size).scale_by(ratio);
} }
} else if num_unspecified_inline_sizes != 0 { } else if num_unspecified_inline_sizes != 0 {
let extra_column_inline_size = (content_inline_size - total_column_inline_size) / Au::new(num_unspecified_inline_sizes); let extra_column_inline_size = (content_inline_size - total_column_inline_size) / num_unspecified_inline_sizes;
for col_inline_size in self.col_inline_sizes.mut_iter() { for col_inline_size in self.col_inline_sizes.mut_iter() {
if *col_inline_size == Au(0) { if *col_inline_size == Au(0) {
*col_inline_size = extra_column_inline_size; *col_inline_size = extra_column_inline_size;

View file

@ -9,7 +9,7 @@ use geom::size::Size2D;
use serialize::{Encodable, Encoder}; use serialize::{Encodable, Encoder};
use std::default::Default; use std::default::Default;
use std::num::{NumCast, One, Zero}; use std::num::{NumCast, Zero};
use std::fmt; use std::fmt;
// Units for use with geom::length and geom::scale_factor. // Units for use with geom::length and geom::scale_factor.
@ -102,30 +102,27 @@ impl Sub<Au,Au> for Au {
} }
impl Mul<Au,Au> for Au { impl Mul<i32, Au> for Au {
#[inline] #[inline]
fn mul(&self, other: &Au) -> Au { fn mul(&self, other: &i32) -> Au {
let Au(s) = *self; let Au(s) = *self;
let Au(o) = *other; Au(s * *other)
Au(s * o)
} }
} }
impl Div<Au,Au> for Au { impl Div<i32, Au> for Au {
#[inline] #[inline]
fn div(&self, other: &Au) -> Au { fn div(&self, other: &i32) -> Au {
let Au(s) = *self; let Au(s) = *self;
let Au(o) = *other; Au(s / *other)
Au(s / o)
} }
} }
impl Rem<Au,Au> for Au { impl Rem<i32, Au> for Au {
#[inline] #[inline]
fn rem(&self, other: &Au) -> Au { fn rem(&self, other: &i32) -> Au {
let Au(s) = *self; let Au(s) = *self;
let Au(o) = *other; Au(s % *other)
Au(s % o)
} }
} }
@ -137,13 +134,6 @@ impl Neg<Au> for Au {
} }
} }
impl One for Au {
#[inline]
fn one() -> Au { Au(1) }
}
impl Num for Au {}
#[inline] #[inline]
pub fn min(x: Au, y: Au) -> Au { if x < y { x } else { y } } pub fn min(x: Au, y: Au) -> Au { if x < y { x } else { y } }
#[inline] #[inline]