Libbarrett
1.2.4
|
00001 /* 00002 * traits.h 00003 * 00004 * Created on: Feb 17, 2010 00005 * Author: dc 00006 */ 00007 00008 #ifndef BARRETT_MATH_TRAITS_H_ 00009 #define BARRETT_MATH_TRAITS_H_ 00010 00011 00012 namespace barrett { 00013 namespace math { 00014 00015 00016 // TODO(dc): test! 00017 00018 // Default designed for built-in arithmetic types. 00019 template<typename T> struct Traits { 00020 typedef T unitless_type; 00021 static const bool RequiresAlignment = false; 00022 00023 00024 static T zero() { 00025 return T(); 00026 } 00027 00028 static void zero(T& t) { 00029 t = 0; 00030 } 00031 00032 static T add(T l, T r) { 00033 return l + r; 00034 } 00035 00036 static T sub(T l, T r) { 00037 return l - r; 00038 } 00039 00040 static T neg(T t) { 00041 return -t; 00042 } 00043 00044 static T mult(T l, T r) { 00045 return l * r; 00046 } 00047 00048 static T div(T l, T r) { 00049 return l / r; 00050 } 00051 }; 00052 00053 00054 } 00055 } 00056 00057 00058 #endif /* BARRETT_MATH_TRAITS_H_ */