Max 5 API Reference
00001 /* 00002 * jit.distance.euclidean.c 00003 * 00004 * Copyright 2001-2005 - Cycling '74 00005 * Derek Gerstmann - derek@cycling74.com 00006 * 00007 * functor for calculating euclidean distance 00008 * 00009 */ 00010 00011 #include "jit.common.h" 00012 #include "jit.functor.h" 00013 00014 // -------------------------------------------------------------------------- 00015 00016 typedef struct _jit_functor_distance_euclidean 00017 { 00018 t_jit_object ob; 00019 00020 } t_jit_functor_distance_euclidean; 00021 00022 // -------------------------------------------------------------------------- 00023 00024 t_jit_object *jit_functor_distance_euclidean_new(void); 00025 t_jit_err jit_functor_distance_euclidean_free(t_jit_functor_distance_euclidean *x); 00026 t_jit_err jit_functor_distance_euclidean_recalc(t_jit_functor_distance_euclidean *x); 00027 00028 long jit_functor_distance_euclidean_eval_fixed(t_jit_functor_distance_euclidean *x, long dimcount, long *vals); 00029 float jit_functor_distance_euclidean_eval_float32(t_jit_functor_distance_euclidean *x, long dimcount, float *vals); 00030 double jit_functor_distance_euclidean_eval_float64(t_jit_functor_distance_euclidean *x, long dimcount, double *vals); 00031 00032 t_class *_jit_functor_distance_euclidean_class; 00033 00034 // -------------------------------------------------------------------------- 00035 00036 t_jit_err jit_functor_distance_euclidean_init(void) 00037 { 00038 t_jit_object *attr; 00039 00040 // create class 00041 _jit_functor_distance_euclidean_class = jit_class_new("jit_functor_distance_euclidean", 00042 (method)jit_functor_distance_euclidean_new,(method)jit_functor_distance_euclidean_free, 00043 sizeof(t_jit_functor_distance_euclidean),0L); 00044 00045 // add evaluation methods 00046 jit_class_addmethod(_jit_functor_distance_euclidean_class, 00047 (method)jit_functor_distance_euclidean_eval_fixed, "evalfixed", A_CANT, 0L); 00048 jit_class_addmethod(_jit_functor_distance_euclidean_class, 00049 (method)jit_functor_distance_euclidean_eval_float32, "evalfloat32", A_CANT, 0L); 00050 jit_class_addmethod(_jit_functor_distance_euclidean_class, 00051 (method)jit_functor_distance_euclidean_eval_float64, "evalfloat64", A_CANT, 0L); 00052 00053 // add to functor registry 00054 jit_functor_setup_class(_jit_functor_distance_euclidean_class,"distance","euclidean"); 00055 jit_class_register(_jit_functor_distance_euclidean_class); 00056 00057 return JIT_ERR_NONE; 00058 } 00059 00060 // -------------------------------------------------------------------------- 00061 00062 t_jit_object *jit_functor_distance_euclidean_new(void) 00063 { 00064 t_jit_functor_distance_euclidean *x; 00065 00066 if (x = (t_jit_functor_distance_euclidean *)jit_object_alloc(_jit_functor_distance_euclidean_class)) { 00067 // initialization 00068 jit_functor_distance_euclidean_recalc(x); 00069 } 00070 00071 return (t_jit_object *)x; 00072 } 00073 00074 t_jit_err jit_functor_distance_euclidean_free(t_jit_functor_distance_euclidean *x) 00075 { 00076 return JIT_ERR_NONE; 00077 } 00078 00079 // -------------------------------------------------------------------------- 00080 00081 t_jit_err jit_functor_distance_euclidean_recalc( 00082 t_jit_functor_distance_euclidean *x) 00083 { 00084 // calculate intermediary values for efficiency 00085 return JIT_ERR_NONE; 00086 } 00087 00088 long jit_functor_distance_euclidean_eval_fixed( 00089 t_jit_functor_distance_euclidean *x, long dimcount, long *vals) 00090 { 00091 return jit_functor_eval_fixed_with_float32((t_jit_object *)x,dimcount,vals, 00092 (t_jit_functor_float32_sig)jit_functor_distance_euclidean_eval_float32); 00093 } 00094 00095 float jit_functor_distance_euclidean_eval_float32( 00096 t_jit_functor_distance_euclidean *x, long dimcount, float *vals) 00097 { 00098 long i; 00099 float rval = vals[0] * vals[0]; 00100 00101 for (i = 1; i < dimcount; i++) { 00102 rval += vals[i] * vals[i]; 00103 } 00104 00105 return jit_math_sqrt(rval); 00106 } 00107 00108 double jit_functor_distance_euclidean_eval_float64( 00109 t_jit_functor_distance_euclidean *x, long dimcount, double *vals) 00110 { 00111 long i; 00112 double rval= vals[0] * vals[0]; 00113 00114 for (i = 1; i < dimcount; i++) { 00115 rval += vals[i] * vals[i]; 00116 } 00117 00118 return jit_math_sqrt(rval); 00119 } 00120 00121 // --------------------------------------------------------------------------
Copyright © 2008, Cycling '74