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