sub method

MathTime sub(
  1. dynamic r
)

Implementation

MathTime sub( dynamic r ){
	if( r is MathTime ){
		if( _minus != r._minus ){
			// this + -r
			return add( r.minus() );
		}
		MathTime ll = dup( this );
		ll._update();
		MathTime rr = dup( r );
		rr._update();
		MathTime t = MathTime(
			ll._minus,
			ll._hour  - rr._hour,
			ll._min   - rr._min,
			ll._sec   - rr._sec,
			ll._frame - rr._frame
			);
		t.reduce();
		return t;
	}
	double rr = ClipMath.toDouble(r);
	if( _minus != (rr < 0.0) ){
		// this + -rr
		return add( -rr );
	}
	MathTime ll = dup( this );
	ll._update();
	MathTime rrr = floatToTime( rr );
	MathTime t = MathTime(
		ll._minus,
		ll._hour  - rrr._hour,
		ll._min   - rrr._min,
		ll._sec   - rrr._sec,
		ll._frame - rrr._frame
		);
	t.reduce();
	return t;
}