From 11a2b84ee043230269b7a532e558632261e3e404 Mon Sep 17 00:00:00 2001 From: Eduard Bopp Date: Wed, 10 Dec 2014 15:37:49 +0100 Subject: [PATCH] Derive Copy wherever sensible Copy is now opt-in, see [1]. To keep the current library functionality it is derived for all sensibly copyable types. [1]: https://github.com/rust-lang/rust/commit/096a28607fb80c91e6e2ca64d9ef44c4e550e96c --- src/structs/iso.rs | 6 +++--- src/structs/mat.rs | 14 +++++++------- src/structs/ortho.rs | 4 ++-- src/structs/persp.rs | 4 ++-- src/structs/pnt.rs | 14 +++++++------- src/structs/quat.rs | 4 ++-- src/structs/rot.rs | 6 +++--- src/structs/vec.rs | 14 +++++++------- src/traits/operations.rs | 2 +- 9 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/structs/iso.rs b/src/structs/iso.rs index 5a13e649..d99980c2 100644 --- a/src/structs/iso.rs +++ b/src/structs/iso.rs @@ -18,7 +18,7 @@ use structs::rot::{Rot2, Rot3, Rot4}; /// /// This is the composition of a rotation followed by a translation. /// Isometries conserve angles and distances, hence do not allow shearing nor scaling. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Copy)] pub struct Iso2 { /// The rotation applicable by this isometry. pub rotation: Rot2, @@ -30,7 +30,7 @@ pub struct Iso2 { /// /// This is the composition of a rotation followed by a translation. /// Isometries conserve angles and distances, hence do not allow shearing nor scaling. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Copy)] pub struct Iso3 { /// The rotation applicable by this isometry. pub rotation: Rot3, @@ -41,7 +41,7 @@ pub struct Iso3 { /// Four dimensional isometry. /// /// Isometries conserve angles and distances, hence do not allow shearing nor scaling. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Copy)] pub struct Iso4 { /// The rotation applicable by this isometry. pub rotation: Rot4, diff --git a/src/structs/mat.rs b/src/structs/mat.rs index 186ddf4f..b291d7cc 100644 --- a/src/structs/mat.rs +++ b/src/structs/mat.rs @@ -17,7 +17,7 @@ use linalg; /// Special identity matrix. All its operation are no-ops. -#[deriving(Eq, PartialEq, Decodable, Clone, Rand, Show)] +#[deriving(Eq, PartialEq, Decodable, Clone, Rand, Show, Copy)] pub struct Identity; impl Identity { @@ -29,7 +29,7 @@ impl Identity { } /// Square matrix of dimension 1. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Mat1 { pub m11: N } @@ -73,7 +73,7 @@ outer_impl!(Vec1, Mat1) eigen_qr_impl!(Mat1, Vec1) /// Square matrix of dimension 2. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Mat2 { pub m11: N, pub m21: N, pub m12: N, pub m22: N @@ -121,7 +121,7 @@ outer_impl!(Vec2, Mat2) eigen_qr_impl!(Mat2, Vec2) /// Square matrix of dimension 3. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Mat3 { pub m11: N, pub m21: N, pub m31: N, pub m12: N, pub m22: N, pub m32: N, @@ -203,7 +203,7 @@ outer_impl!(Vec3, Mat3) eigen_qr_impl!(Mat3, Vec3) /// Square matrix of dimension 4. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Mat4 { pub m11: N, pub m21: N, pub m31: N, pub m41: N, pub m12: N, pub m22: N, pub m32: N, pub m42: N, @@ -303,7 +303,7 @@ outer_impl!(Vec4, Mat4) eigen_qr_impl!(Mat4, Vec4) /// Square matrix of dimension 5. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Mat5 { pub m11: N, pub m21: N, pub m31: N, pub m41: N, pub m51: N, pub m12: N, pub m22: N, pub m32: N, pub m42: N, pub m52: N, @@ -417,7 +417,7 @@ outer_impl!(Vec5, Mat5) eigen_qr_impl!(Mat5, Vec5) /// Square matrix of dimension 6. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Mat6 { pub m11: N, pub m21: N, pub m31: N, pub m41: N, pub m51: N, pub m61: N, pub m12: N, pub m22: N, pub m32: N, pub m42: N, pub m52: N, pub m62: N, diff --git a/src/structs/ortho.rs b/src/structs/ortho.rs index 01941ce4..a6789fee 100644 --- a/src/structs/ortho.rs +++ b/src/structs/ortho.rs @@ -5,7 +5,7 @@ use structs::{Pnt3, Vec3, Mat4}; /// A 3D orthographic projection stored without any matrix. /// /// Reading or modifying its individual properties is cheap but applying the transformation is costly. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Copy)] pub struct Ortho3 { width: N, height: N, @@ -16,7 +16,7 @@ pub struct Ortho3 { /// A 3D orthographic projection stored as a 4D matrix. /// /// Reading or modifying its individual properties is costly but applying the transformation is cheap. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Copy)] pub struct OrthoMat3 { mat: Mat4 } diff --git a/src/structs/persp.rs b/src/structs/persp.rs index 0b420270..0a06645e 100644 --- a/src/structs/persp.rs +++ b/src/structs/persp.rs @@ -4,7 +4,7 @@ use structs::{Pnt3, Vec3, Mat4}; /// A 3D perspective projection stored without any matrix. /// /// Reading or modifying its individual properties is cheap but applying the transformation is costly. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Copy)] pub struct Persp3 { aspect: N, fov: N, @@ -15,7 +15,7 @@ pub struct Persp3 { /// A 3D perspective projection stored as a 4D matrix. /// /// Reading or modifying its individual properties is costly but applying the transformation is cheap. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Copy)] pub struct PerspMat3 { mat: Mat4 } diff --git a/src/structs/pnt.rs b/src/structs/pnt.rs index 306c974a..66f6d906 100644 --- a/src/structs/pnt.rs +++ b/src/structs/pnt.rs @@ -14,7 +14,7 @@ use structs::vec::{Vec1, Vec2, Vec3, Vec4, Vec5, Vec6}; /// Point of dimension 0. -#[deriving(Eq, PartialEq, Decodable, Clone, Rand, Show)] +#[deriving(Eq, PartialEq, Decodable, Clone, Rand, Show, Copy)] pub struct Pnt0; impl Pnt0 { @@ -32,7 +32,7 @@ impl Pnt0 { } /// Point of dimension 1. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Pnt1 { /// First component of the point. pub x: N @@ -70,7 +70,7 @@ pnt_from_homogeneous_impl!(Pnt1, Pnt2, y, x) num_float_pnt_impl!(Pnt1, Vec1) /// Point of dimension 2. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Pnt2 { /// First component of the point. pub x: N, @@ -110,7 +110,7 @@ pnt_from_homogeneous_impl!(Pnt2, Pnt3, z, x, y) num_float_pnt_impl!(Pnt2, Vec2) /// Point of dimension 3. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Pnt3 { /// First component of the point. pub x: N, @@ -152,7 +152,7 @@ pnt_from_homogeneous_impl!(Pnt3, Pnt4, w, x, y, z) num_float_pnt_impl!(Pnt3, Vec3) /// Point of dimension 4. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Pnt4 { /// First component of the point. pub x: N, @@ -196,7 +196,7 @@ pnt_from_homogeneous_impl!(Pnt4, Pnt5, a, x, y, z, w) num_float_pnt_impl!(Pnt4, Vec4) /// Point of dimension 5. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Pnt5 { /// First component of the point. pub x: N, @@ -242,7 +242,7 @@ pnt_from_homogeneous_impl!(Pnt5, Pnt6, b, x, y, z, w, a) num_float_pnt_impl!(Pnt5, Vec5) /// Point of dimension 6. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Pnt6 { /// First component of the point. pub x: N, diff --git a/src/structs/quat.rs b/src/structs/quat.rs index 5cd95501..b8b444fd 100644 --- a/src/structs/quat.rs +++ b/src/structs/quat.rs @@ -14,7 +14,7 @@ use traits::structure::{Cast, Indexable, Iterable, IterableMut, Dim, Shape, Base use traits::geometry::{Norm, Cross, Rotation, Rotate, Transform}; /// A quaternion. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Quat { /// The scalar component of the quaternion. pub w: N, @@ -139,7 +139,7 @@ impl + BaseFloat + Clone> Div, Quat> for Quat { } /// A unit quaternion that can represent a 3D rotation. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Show, Copy)] pub struct UnitQuat { q: Quat } diff --git a/src/structs/rot.rs b/src/structs/rot.rs index 83f30310..d4d8122d 100644 --- a/src/structs/rot.rs +++ b/src/structs/rot.rs @@ -13,7 +13,7 @@ use structs::mat::{Mat2, Mat3, Mat4, Mat5}; /// Two dimensional rotation matrix. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Hash)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Hash, Copy)] pub struct Rot2 { submat: Mat2 } @@ -90,7 +90,7 @@ impl AbsoluteRotate> for Rot2 { * 3d rotation */ /// Three dimensional rotation matrix. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Hash)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Hash, Copy)] pub struct Rot3 { submat: Mat3 } @@ -288,7 +288,7 @@ impl AbsoluteRotate> for Rot3 { } /// Four dimensional rotation matrix. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Hash)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Hash, Copy)] pub struct Rot4 { submat: Mat4 } diff --git a/src/structs/vec.rs b/src/structs/vec.rs index 904c8857..ebf975c2 100644 --- a/src/structs/vec.rs +++ b/src/structs/vec.rs @@ -15,7 +15,7 @@ use structs::pnt::{Pnt1, Pnt2, Pnt3, Pnt4, Pnt5, Pnt6}; /// Vector of dimension 0. -#[deriving(Eq, PartialEq, Decodable, Clone, Rand, Zero, Show)] +#[deriving(Eq, PartialEq, Decodable, Clone, Rand, Zero, Show, Copy)] pub struct Vec0; impl Vec0 { @@ -33,7 +33,7 @@ impl Vec0 { } /// Vector of dimension 1. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Show, Copy)] pub struct Vec1 { /// First component of the vector. pub x: N @@ -82,7 +82,7 @@ num_float_vec_impl!(Vec1) absolute_vec_impl!(Vec1, x) /// Vector of dimension 2. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show, Copy)] pub struct Vec2 { /// First component of the vector. pub x: N, @@ -133,7 +133,7 @@ num_float_vec_impl!(Vec2) absolute_vec_impl!(Vec2, x, y) /// Vector of dimension 3. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show, Copy)] pub struct Vec3 { /// First component of the vector. pub x: N, @@ -187,7 +187,7 @@ absolute_vec_impl!(Vec3, x, y, z) /// Vector of dimension 4. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show, Copy)] pub struct Vec4 { /// First component of the vector. pub x: N, @@ -242,7 +242,7 @@ num_float_vec_impl!(Vec4) absolute_vec_impl!(Vec4, x, y, z, w) /// Vector of dimension 5. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show, Copy)] pub struct Vec5 { /// First component of the vector. pub x: N, @@ -299,7 +299,7 @@ num_float_vec_impl!(Vec5) absolute_vec_impl!(Vec5, x, y, z, w, a) /// Vector of dimension 6. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Hash, Rand, Zero, Show, Copy)] pub struct Vec6 { /// First component of the vector. pub x: N, diff --git a/src/traits/operations.rs b/src/traits/operations.rs index c5e211a8..1f00b021 100644 --- a/src/traits/operations.rs +++ b/src/traits/operations.rs @@ -4,7 +4,7 @@ use std::num::{Float, SignedInt}; use traits::structure::SquareMat; /// Result of a partial ordering. -#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show)] +#[deriving(Eq, PartialEq, Encodable, Decodable, Clone, Show, Copy)] pub enum POrdering { /// Result of a strict comparison. PartialLess,