1 #ifndef SimTK_SIMMATRIX_NEGATOR_H_
2 #define SimTK_SIMMATRIX_NEGATOR_H_
63 template <
class T>
class CNT;
64 template <
class N>
class NTraits;
65 template <
class N>
class negator;
74 template <
class NUMBER>
155 SignInterpretation = -1
183 inline bool isNaN()
const;
186 inline bool isInf()
const;
229 template <
class P>
negator(
const std::complex<P>& t) {v = -N(t);}
237 {
return reinterpret_cast<const negator<N>&
>(val); }
243 operator N()
const {
return N(-v); }
245 template <
class P>
negator& operator =(
const P& t) { v = -t;
return *
this; }
256 { v = -t;
return *
this; }
258 { v += -t;
return *
this; }
260 { v -= -t;
return *
this; }
276 template <
class P>
inline bool
278 template <
class P>
inline bool
290 template <
class P>
inline bool
292 template <
class P>
inline bool
304 template <
class P>
inline bool
306 template <
class P>
inline bool
311 template <
class N>
inline bool
313 template <
class N>
inline bool
315 template <
class N>
inline bool
329 template <
class DEST,
class SRC>
static inline const DEST&
330 negRecast(
const SRC& s) {
return reinterpret_cast<const DEST&
>(s); }
333 template <
class A,
class B>
inline typename negator<A>::template Result<B>::Add
335 {
return negRecast<typename negator<A>::template Result<B>::Add>(r-(-l));}
336 template <
class A,
class B>
inline typename CNT<A>::template Result<negator<B> >::Add
338 {
return negRecast<typename CNT<A>::template Result<negator<B> >::Add>(l-(-r));}
340 template <
class A,
class B>
inline typename negator<A>::template Result<negator<B> >::Add
342 {
return negRecast<typename negator<A>::template Result<negator<B> >::Add>(r-(-l)); }
345 template <
class A,
class B>
inline typename negator<A>::template Result<B>::Sub
347 {
return negRecast<typename negator<A>::template Result<B>::Sub>(r+(-l));}
348 template <
class A,
class B>
inline typename CNT<A>::template Result<negator<B> >::Sub
350 {
return negRecast<typename CNT<A>::template Result<negator<B> >::Sub>(l+(-r));}
352 template <
class A,
class B>
inline typename negator<A>::template Result<negator<B> >::Sub
354 {
return negRecast<typename negator<A>::template Result<negator<B> >::Sub>(r+(-l));}
357 template <
class A,
class B>
inline typename negator<A>::template Result<B>::Mul
359 {
return negRecast<typename negator<A>::template Result<B>::Mul>((-l)*r);}
360 template <
class A,
class B>
inline typename CNT<A>::template Result<negator<B> >::Mul
362 {
return negRecast<typename CNT<A>::template Result<negator<B> >::Mul>(l*(-r));}
364 template <
class A,
class B>
inline typename negator<A>::template Result<negator<B> >::Mul
366 {
return negRecast<typename negator<A>::template Result<negator<B> >::Mul>((-l)*r);}
369 template <
class A,
class B>
inline typename negator<A>::template Result<B>::Dvd
371 {
return negRecast<typename negator<A>::template Result<B>::Dvd>((-l)/r);}
372 template <
class A,
class B>
inline typename CNT<A>::template Result<negator<B> >::Dvd
374 {
return negRecast<typename CNT<A>::template Result<negator<B> >::Dvd>(l/(-r));}
376 template <
class A,
class B>
inline typename negator<A>::template Result<negator<B> >::Dvd
378 {
return negRecast<typename negator<A>::template Result<negator<B> >::Dvd>((-l)/r);}
381 template <
class A,
class B>
inline bool
383 template <
class A,
class B>
inline bool
385 template <
class A,
class B>
inline bool
389 template <
class A,
class B>
inline bool
391 template <
class A,
class B>
inline bool
393 template <
class A,
class B>
inline bool
397 template <
class NUM,
class CHAR,
class TRAITS>
inline std::basic_istream<CHAR,TRAITS>&
399 NUM z; is >> z; nn=z;
402 template <
class NUM,
class CHAR,
class TRAITS>
inline std::basic_ostream<CHAR,TRAITS>&
403 operator<<(std::basic_ostream<CHAR,TRAITS>& os,
const negator<NUM>& nn) {
404 return os << NUM(nn);
409 #endif //SimTK_SIMMATRIX_NEGATOR_H_