Max 5 API Reference
00001 /* 00002 * jit.transfer.saw.c 00003 * 00004 * Copyright 2001-2005 - Cycling '74 00005 * Derek Gerstmann - derek@cycling74.com 00006 * 00007 * functor for a transfer saw 00008 * 00009 */ 00010 00011 // ----------------------------------------------------------------------------- 00012 00013 #include "jit.common.h" 00014 #include "jit.functor.h" 00015 00016 // ----------------------------------------------------------------------------- 00017 00018 #define JIT_SAW_FLOOR(a) ((long)(a) - ((a) < 0 && (a) != (long)(a))) 00019 00020 // ----------------------------------------------------------------------------- 00021 00022 typedef struct _jit_functor_transfer_saw 00023 { 00024 t_jit_object ob; 00025 } t_jit_functor_transfer_saw; 00026 00027 // ----------------------------------------------------------------------------- 00028 t_jit_object *jit_functor_transfer_saw_new(void); 00029 t_jit_err jit_functor_transfer_saw_free(t_jit_functor_transfer_saw *x); 00030 t_jit_err jit_functor_transfer_saw_recalc(t_jit_functor_transfer_saw *x); 00031 00032 long jit_functor_transfer_saw_eval_fixed(t_jit_functor_transfer_saw *x, long dimcount, long *vals); 00033 float jit_functor_transfer_saw_eval_float32(t_jit_functor_transfer_saw *x, long dimcount, float *vals); 00034 double jit_functor_transfer_saw_eval_float64(t_jit_functor_transfer_saw *x, long dimcount, double *vals); 00035 00036 long jit_functor_transfer_saw_eval_fixed_scalar(t_jit_functor_transfer_saw *x, long val); 00037 float jit_functor_transfer_saw_eval_float32_scalar(t_jit_functor_transfer_saw *x, float val); 00038 double jit_functor_transfer_saw_eval_float64_scalar(t_jit_functor_transfer_saw *x, double val); 00039 00040 t_class * _jit_functor_transfer_saw_class; 00041 00042 // -------------------------------------------------------------------------- 00043 00044 t_jit_err jit_functor_transfer_saw_init(void) 00045 { 00046 t_jit_object *attr; 00047 00048 // create functor class 00049 _jit_functor_transfer_saw_class = jit_class_new("jit_functor_transfer_saw", 00050 (method)jit_functor_transfer_saw_new,(method)jit_functor_transfer_saw_free, 00051 sizeof(t_jit_functor_transfer_saw),0L); 00052 00053 // add evaluation methods 00054 jit_class_addmethod(_jit_functor_transfer_saw_class, 00055 (method)jit_functor_transfer_saw_eval_fixed, "evalfixed", A_CANT, 0L); 00056 jit_class_addmethod(_jit_functor_transfer_saw_class, 00057 (method)jit_functor_transfer_saw_eval_float32, "evalfloat32", A_CANT, 0L); 00058 jit_class_addmethod(_jit_functor_transfer_saw_class, 00059 (method)jit_functor_transfer_saw_eval_float64, "evalfloat64", A_CANT, 0L); 00060 00061 // important to add last for subclassing methods 00062 jit_functor_setup_class(_jit_functor_transfer_saw_class,"transfer","saw"); 00063 jit_class_register(_jit_functor_transfer_saw_class); 00064 00065 return JIT_ERR_NONE; 00066 } 00067 00068 t_jit_object *jit_functor_transfer_saw_new(void) 00069 { 00070 t_jit_functor_transfer_saw *x; 00071 00072 if (x = (t_jit_functor_transfer_saw *)jit_object_alloc(_jit_functor_transfer_saw_class)) { 00073 00074 // initialization 00075 jit_functor_transfer_saw_recalc(x); 00076 } 00077 00078 return (t_jit_object *)x; 00079 } 00080 00081 t_jit_err jit_functor_transfer_saw_free(t_jit_functor_transfer_saw *x) 00082 { 00083 return JIT_ERR_NONE; 00084 } 00085 00086 t_jit_err jit_functor_transfer_saw_recalc(t_jit_functor_transfer_saw *x) 00087 { 00088 // calculate intermediary values for efficiency 00089 return JIT_ERR_NONE; 00090 } 00091 00092 // ----------------------------------------------------------------------------- 00093 // vector evaluation functions 00094 // ----------------------------------------------------------------------------- 00095 long jit_functor_transfer_saw_eval_fixed( 00096 t_jit_functor_transfer_saw *x, long dimcount, long *vals) 00097 { 00098 return jit_functor_eval_fixed_with_float64((t_jit_object *)x,dimcount,vals, 00099 (t_jit_functor_float64_sig)jit_functor_transfer_saw_eval_float64); 00100 } 00101 00102 float jit_functor_transfer_saw_eval_float32( 00103 t_jit_functor_transfer_saw *x, long dimcount, float *vals) 00104 { 00105 return jit_functor_eval_float32_with_scalar_product((t_jit_object *)x,dimcount,vals, 00106 (t_jit_functor_float32_scalar_sig)jit_functor_transfer_saw_eval_float32_scalar); 00107 } 00108 00109 double jit_functor_transfer_saw_eval_float64( 00110 t_jit_functor_transfer_saw *x, long dimcount, double *vals) 00111 { 00112 return jit_functor_eval_float64_with_scalar_product((t_jit_object *)x,dimcount,vals, 00113 (t_jit_functor_float64_scalar_sig)jit_functor_transfer_saw_eval_float64_scalar); 00114 } 00115 00116 // ----------------------------------------------------------------------------- 00117 // scalar evaluation functions 00118 // ----------------------------------------------------------------------------- 00119 long jit_functor_transfer_saw_eval_fixed_scalar( 00120 t_jit_functor_transfer_saw *x, long val) 00121 { 00122 return FloatToFixed(jit_functor_transfer_saw_eval_float32_scalar(x,FixedToFloat(val))); 00123 } 00124 00125 float jit_functor_transfer_saw_eval_float32_scalar( 00126 t_jit_functor_transfer_saw *x, float val) 00127 { 00128 return (val - JIT_SAW_FLOOR(val)); 00129 } 00130 00131 double jit_functor_transfer_saw_eval_float64_scalar( 00132 t_jit_functor_transfer_saw *x, double val) 00133 { 00134 return (val - JIT_SAW_FLOOR(val)); 00135 } 00136 // -----------------------------------------------------------------------------
Copyright © 2008, Cycling '74