Changeset 20936 for trunk/Ohana/src/opihi/lib.shell/VectorOps.c
- Timestamp:
- Dec 7, 2008, 3:31:01 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/lib.shell/VectorOps.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/lib.shell/VectorOps.c
r16887 r20936 1 1 # include "opihi.h" 2 3 // NOTE: we refer to elements.Ptr if we do not care about the actual type 2 4 3 5 static Vector **vectors; … … 18 20 19 21 for (i = 0; i < Nvectors; i++) { 20 free (vectors[i][0].elements); 22 if (vectors[i][0].elements.Int) { 23 free (vectors[i][0].elements.Int); 24 } 21 25 free (vectors[i]); 22 26 } … … 28 32 29 33 ALLOCATE (vec, Vector, 1); 30 ALLOCATE (vec[0].elements, float, 1); 31 bzero (vec[0].name, 1024); 34 35 vec[0].type = OPIHI_FLT; // is a float unless specified otherwise 36 ALLOCATE (vec[0].elements.Flt, opihi_flt, 1); 37 38 bzero (vec[0].name, OPIHI_NAME_SIZE); 32 39 vec[0].Nelements = 0; 33 40 return (vec); … … 56 63 } 57 64 65 // XXX add TYPE to arguments? 58 66 Vector *SelectVector (char *name, int mode, int verbose) { 59 67 … … 95 103 if (i == Nvectors) return (FALSE); 96 104 97 free (vectors[i][0].elements);105 if (vectors[i][0].elements.Ptr) free (vectors[i][0].elements.Ptr); 98 106 free (vectors[i]); 99 107 … … 115 123 if (i == Nvectors) return (FALSE); 116 124 117 free (vectors[i][0].elements);125 if (vectors[i][0].elements.Ptr) free (vectors[i][0].elements.Ptr); 118 126 free (vectors[i]); 119 127 … … 134 142 return (TRUE); 135 143 } 144 136 145 int CopyVector (Vector *out, Vector *in) { 137 free (out[0].elements);146 if (out[0].elements.Ptr) free (out[0].elements.Ptr); 138 147 out[0].Nelements = in[0].Nelements; 139 ALLOCATE (out[0].elements, float, out[0].Nelements); 140 memcpy (out[0].elements, in[0].elements, out[0].Nelements*sizeof(float)); 141 return (TRUE); 148 if (in[0].elements.Ptr) { 149 if (in[0].type == OPIHI_FLT) { 150 ALLOCATE (out[0].elements.Flt, opihi_flt, out[0].Nelements); 151 memcpy (out[0].elements.Flt, in[0].elements.Flt, out[0].Nelements*sizeof(opihi_flt)); 152 out[0].type = OPIHI_FLT; 153 } else { 154 ALLOCATE (out[0].elements.Int, opihi_int, out[0].Nelements); 155 memcpy (out[0].elements.Int, in[0].elements.Int, out[0].Nelements*sizeof(opihi_int)); 156 out[0].type = OPIHI_INT; 157 } 158 } 159 return (TRUE); 160 } 161 162 int MatchVector(Vector *out, Vector *in, char type) { 163 if (out[0].elements.Ptr) free (out[0].elements.Ptr); 164 out[0].Nelements = in[0].Nelements; 165 if (type == OPIHI_FLT) { 166 ALLOCATE (out[0].elements.Flt, opihi_flt, out[0].Nelements); 167 out[0].type = OPIHI_FLT; 168 } else { 169 ALLOCATE (out[0].elements.Int, opihi_int, out[0].Nelements); 170 out[0].type = OPIHI_INT; 171 } 172 return (TRUE); 173 } 174 175 // ResetVector (vecx, OPIHI_FLT, MAX (Npts, 1)); 176 int ResetVector (Vector *vec, char type, int Nelements) { 177 178 vec[0].Nelements = Nelements; 179 if (type == OPIHI_FLT) { 180 REALLOCATE (vec[0].elements.Flt, opihi_flt, Nelements); 181 vec[0].type = OPIHI_FLT; 182 } else { 183 REALLOCATE (vec[0].elements.Int, opihi_int, Nelements); 184 vec[0].type = OPIHI_INT; 185 } 186 return TRUE; 187 } 188 189 // SetVector (vecx, OPIHI_FLT, MAX (Npts, 1)); 190 int SetVector (Vector *vec, char type, int Nelements) { 191 192 vec[0].Nelements = Nelements; 193 if (type == OPIHI_FLT) { 194 ALLOCATE (vec[0].elements.Flt, opihi_flt, Nelements); 195 vec[0].type = OPIHI_FLT; 196 } else { 197 ALLOCATE (vec[0].elements.Int, opihi_int, Nelements); 198 vec[0].type = OPIHI_INT; 199 } 200 return TRUE; 201 } 202 203 // recast the vector to the specified type 204 int CastVector (Vector *vec, char type) { 205 206 int i; 207 208 // the trivial case 209 if (vec[0].type == type) return TRUE; 210 211 if (type == OPIHI_FLT) { 212 opihi_flt *temp; 213 ALLOCATE (temp, opihi_flt, vec[0].Nelements); 214 opihi_flt *vo = temp; 215 opihi_int *vi = vec[0].elements.Int; 216 for (i = 0; i < vec[0].Nelements; i++, vo++, vi++) { 217 *vo = *vi; 218 } 219 free (vec[0].elements.Int); 220 vec[0].elements.Flt = vo; 221 vec[0].type = OPIHI_FLT; 222 } else { 223 opihi_int *temp; 224 ALLOCATE (temp, opihi_int, vec[0].Nelements); 225 opihi_int *vo = temp; 226 opihi_flt *vi = vec[0].elements.Flt; 227 for (i = 0; i < vec[0].Nelements; i++, vo++, vi++) { 228 *vo = *vi; 229 } 230 free (vec[0].elements.Flt); 231 vec[0].elements.Int = vo; 232 vec[0].type = OPIHI_INT; 233 } 234 return TRUE; 142 235 } 143 236 … … 150 243 return (TRUE); 151 244 } 245 152 246 int MoveVector (Vector *out, Vector *in) { 153 247 int i, j; 154 248 155 free (out[0].elements); 156 out[0].Nelements = in[0].Nelements; 157 out[0].elements = in[0].elements; 249 if (out[0].elements.Ptr) free (out[0].elements.Ptr); 250 out[0].Nelements = in[0].Nelements; 251 out[0].elements.Ptr = in[0].elements.Ptr; 252 out[0].type = in[0].type; 158 253 159 254 /* delete vector entry from vector list, if it exists */ … … 184 279 gprint (GP_LOG, " N name size\n"); 185 280 for (i = 0; i < Nvectors; i++) { 186 gprint (GP_LOG, "%5d %10s %10d\n", 187 i, vectors[i][0].name, vectors[i][0].Nelements); 188 } 189 return (TRUE); 190 } 191 281 if (vectors[i][0].type == OPIHI_FLT) { 282 gprint (GP_LOG, "%5d %10s %10d (FLT)\n", i, vectors[i][0].name, vectors[i][0].Nelements); 283 } else { 284 gprint (GP_LOG, "%5d %10s %10d (INT)\n", i, vectors[i][0].name, vectors[i][0].Nelements); 285 } 286 } 287 return (TRUE); 288 } 289
Note:
See TracChangeset
for help on using the changeset viewer.
