8 Commits
0.1.1 ... 0.2.2

6 changed files with 64 additions and 18 deletions

View File

@ -1,3 +1,24 @@
## 0.2.2
> Sun 30th September 2018
- Bump version numbers (`splines-0.2`) in examples.
- Fix several typos in the documentation.
## 0.2.1
> Thu 20th September 2018
- Enhance the features documentation.
# 0.2
> Thu 6th September 2018
- Add the `"std"` feature gate, that can be used to compile with the standard library.
- Add the `"impl-cgmath"` in order to make it optional, if wanted, the `cgmath` dependency.
- Enhance the documentation.
## 0.1.1 ## 0.1.1
> Wed 8th August 2018 > Wed 8th August 2018

View File

@ -1,6 +1,6 @@
[package] [package]
name = "splines" name = "splines"
version = "0.1.1" version = "0.2.2"
license = "BSD-3-Clause" license = "BSD-3-Clause"
authors = ["Dimitri Sabadie <dimitri.sabadie@gmail.com>"] authors = ["Dimitri Sabadie <dimitri.sabadie@gmail.com>"]
description = "Spline interpolation made easy" description = "Spline interpolation made easy"
@ -18,12 +18,14 @@ is-it-maintained-open-issues = { repository = "phaazon/splines" }
maintenance = { status = "actively-developed" } maintenance = { status = "actively-developed" }
[features] [features]
default = ["std"] default = ["std", "impl-cgmath"]
serialization = ["serde", "serde_derive"] serialization = ["serde", "serde_derive"]
std = [] std = []
impl-cgmath = ["cgmath"]
[dependencies] [dependencies.cgmath]
cgmath = "0.16" version = "0.16"
optional = true
[dependencies.serde] [dependencies.serde]
version = "1" version = "1"

View File

@ -12,8 +12,11 @@ This crate has features! Heres a comprehensive list of what you can enable:
- **Serialization / deserialization.** - **Serialization / deserialization.**
+ This feature implements both the `Serialize` and `Deserialize` traits from `serde`. + This feature implements both the `Serialize` and `Deserialize` traits from `serde`.
+ Enable with the `"serialization"` feature. + Enable with the `"serialization"` feature.
- **Standard library / no stdandard library** - **[cgmath](https://crates.io/crates/cgmath) implementors**
+ Adds some usefull implementations of `Interpolate` for some cgmath types.
+ Enable with the `"impl-cgmath"` feature.
- **Standard library / no standard library.**
+ Its possible to compile against the standard library or go on your own without it. + Its possible to compile against the standard library or go on your own without it.
+ Compiling with the standard library is enabled by default. + Compiling with the standard library is enabled by default.
+ Use `defaut-features = []` in your `Cargo.toml` to disable. + Use `default-features = []` in your `Cargo.toml` to disable.
+ Enable explicitly with the `"std"` feataure. + Enable explicitly with the `"std"` feature.

View File

@ -1,7 +1,7 @@
[package] [package]
name = "hello-world" name = "hello-world"
version = "0.1.0" version = "0.2.0"
authors = ["Dimitri Sabadie <dimitri.sabadie@gmail.com>"] authors = ["Dimitri Sabadie <dimitri.sabadie@gmail.com>"]
[dependencies] [dependencies]
splines = "0.1" splines = "0.2"

View File

@ -1,11 +1,11 @@
[package] [package]
name = "serialization" name = "serialization"
version = "0.1.0" version = "0.2.0"
authors = ["Dimitri Sabadie <dimitri.sabadie@gmail.com>"] authors = ["Dimitri Sabadie <dimitri.sabadie@gmail.com>"]
[dependencies] [dependencies]
serde_json = "1" serde_json = "1"
[dependencies.splines] [dependencies.splines]
version = "0.1" version = "0.2"
features = ["serialization"] features = ["serialization"]

View File

@ -77,26 +77,31 @@
//! So heres a list of currently supported features and how to enable them: //! So heres a list of currently supported features and how to enable them:
//! //!
//! - **Serialization / deserialization.** //! - **Serialization / deserialization.**
//! + This feature implements both the `Serialize` and `Deserialize` traits from `serde`. //! + This feature implements both the `Serialize` and `Deserialize` traits from `serde` for all
//! types exported by this crate.
//! + Enable with the `"serialization"` feature. //! + Enable with the `"serialization"` feature.
//! - **Standard library / no stdandard library** //! - **[cgmath](https://crates.io/crates/cgmath) implementors.**
//! + Adds some usefull implementations of `Interpolate` for some cgmath types.
//! + Enable with the `"impl-cgmath"` feature.
//! - **Standard library / no standard library.**
//! + Its possible to compile against the standard library or go on your own without it. //! + Its possible to compile against the standard library or go on your own without it.
//! + Compiling with the standard library is enabled by default. //! + Compiling with the standard library is enabled by default.
//! + Use `defaut-features = []` in your `Cargo.toml` to disable. //! + Use `default-features = []` in your `Cargo.toml` to disable.
//! + Enable explicitly with the `"std"` feataure. //! + Enable explicitly with the `"std"` feature.
#![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(not(feature = "std"), feature(alloc))] #![cfg_attr(not(feature = "std"), feature(alloc))]
#![cfg_attr(not(feature = "std"), feature(core_intrinsics))]
// on no_std, we also need the alloc crate for Vec // on no_std, we also need the alloc crate for Vec
#[cfg(not(feature = "std"))] extern crate alloc; #[cfg(not(feature = "std"))] extern crate alloc;
extern crate cgmath; #[cfg(feature = "impl-cgmath")] extern crate cgmath;
#[cfg(feature = "serialization")] extern crate serde; #[cfg(feature = "serialization")] extern crate serde;
#[cfg(feature = "serialization")] #[macro_use] extern crate serde_derive; #[cfg(feature = "serialization")] #[macro_use] extern crate serde_derive;
use cgmath::{InnerSpace, Quaternion, Vector2, Vector3, Vector4}; #[cfg(feature = "impl-cgmath")] use cgmath::{InnerSpace, Quaternion, Vector2, Vector3, Vector4};
#[cfg(feature = "std")] use std::cmp::Ordering; #[cfg(feature = "std")] use std::cmp::Ordering;
#[cfg(feature = "std")] use std::f32::consts; #[cfg(feature = "std")] use std::f32::consts;
@ -227,7 +232,18 @@ impl<T> Spline<T> {
Interpolation::Cosine => { Interpolation::Cosine => {
let cp1 = &keys[i+1]; let cp1 = &keys[i+1];
let nt = normalize_time(t, cp0, cp1); let nt = normalize_time(t, cp0, cp1);
let cos_nt = (1. - f32::cos(nt * consts::PI)) * 0.5; let cos_nt = {
#[cfg(feature = "std")]
{
(1. - f32::cos(nt * consts::PI)) * 0.5
}
#[cfg(not(feature = "std"))]
{
use core::intrinsics::cosf32;
unsafe { (1. - cosf32(nt * consts::PI)) * 0.5 }
}
};
Some(Interpolate::lerp(cp0.value, cp1.value, cos_nt)) Some(Interpolate::lerp(cp0.value, cp1.value, cos_nt))
}, },
@ -329,6 +345,7 @@ impl Interpolate for f32 {
} }
} }
#[cfg(feature = "impl-cgmath")]
impl Interpolate for Vector2<f32> { impl Interpolate for Vector2<f32> {
fn lerp(a: Self, b: Self, t: f32) -> Self { fn lerp(a: Self, b: Self, t: f32) -> Self {
a.lerp(b, t) a.lerp(b, t)
@ -339,6 +356,7 @@ impl Interpolate for Vector2<f32> {
} }
} }
#[cfg(feature = "impl-cgmath")]
impl Interpolate for Vector3<f32> { impl Interpolate for Vector3<f32> {
fn lerp(a: Self, b: Self, t: f32) -> Self { fn lerp(a: Self, b: Self, t: f32) -> Self {
a.lerp(b, t) a.lerp(b, t)
@ -349,6 +367,7 @@ impl Interpolate for Vector3<f32> {
} }
} }
#[cfg(feature = "impl-cgmath")]
impl Interpolate for Vector4<f32> { impl Interpolate for Vector4<f32> {
fn lerp(a: Self, b: Self, t: f32) -> Self { fn lerp(a: Self, b: Self, t: f32) -> Self {
a.lerp(b, t) a.lerp(b, t)
@ -359,6 +378,7 @@ impl Interpolate for Vector4<f32> {
} }
} }
#[cfg(feature = "impl-cgmath")]
impl Interpolate for Quaternion<f32> { impl Interpolate for Quaternion<f32> {
fn lerp(a: Self, b: Self, t: f32) -> Self { fn lerp(a: Self, b: Self, t: f32) -> Self {
a.nlerp(b, t) a.nlerp(b, t)