IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 25, 2008, 4:51:39 PM (18 years ago)
Author:
eugene
Message:

convert opihi vectors to double type, add option for int type as well

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/VectorOps.c

    r20827 r20839  
    11# include "opihi.h"
     2
     3// NOTE: we refer to elements.Ptr if we do not care about the actual type
    24
    35static Vector **vectors;
     
    1820
    1921  for (i = 0; i < Nvectors; i++) {
    20     if (vectors[i][0].elements) {
    21       free (vectors[i][0].elements);
    22     }
    23     if (vectors[i][0].elementsInt) {
    24       free (vectors[i][0].elementsInt);
     22    if (vectors[i][0].elements.Int) {
     23      free (vectors[i][0].elements.Int);
    2524    }
    2625    free (vectors[i]);
     
    3433  ALLOCATE (vec, Vector, 1);
    3534
    36   vec[0].elementsInt = NULL;
    37   ALLOCATE (vec[0].elements, opihi_float, 1);
    38   vec[0].type = OPIHI_FLOAT;                      /* is a float unless specified otherwise */
    39 
    40   bzero (vec[0].name, 1024);
     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);
    4139  vec[0].Nelements = 0;
    4240  return (vec);
     
    104102  if (i == Nvectors) return (FALSE);
    105103
    106   if (vectors[i][0].elements)    free (vectors[i][0].elements);
    107   if (vectors[i][0].elementsInt) free (vectors[i][0].elementsInt);
     104  if (vectors[i][0].elements.Ptr) free (vectors[i][0].elements.Ptr);
    108105  free (vectors[i]);
    109106
     
    125122  if (i == Nvectors) return (FALSE);
    126123
    127   if (vectors[i][0].elements)    free (vectors[i][0].elements);
    128   if (vectors[i][0].elementsInt) free (vectors[i][0].elementsInt);
     124  if (vectors[i][0].elements.Ptr) free (vectors[i][0].elements.Ptr);
    129125  free (vectors[i]);
    130126
     
    145141  return (TRUE);
    146142}
     143
    147144int CopyVector (Vector *out, Vector *in) {
    148   free (out[0].elements);
     145  if (out[0].elements.Ptr) free (out[0].elements.Ptr);
    149146  out[0].Nelements = in[0].Nelements;
    150   if (in[0].elements) {
    151     assert (in[0].type == OPIHI_FLOAT);
    152     ALLOCATE (out[0].elements, opihi_float, out[0].Nelements);
    153     memcpy (out[0].elements, in[0].elements, out[0].Nelements*sizeof(opihi_float));
    154     out[0].type = OPIHI_FLOAT;
    155   } else {
    156     assert (in[0].type == OPIHI_INT);
    157     ALLOCATE (out[0].elementsInt, opihi_int, out[0].Nelements);
    158     memcpy (out[0].elementsInt, in[0].elementsInt, out[0].Nelements*sizeof(opihi_int));
    159     out[0].type = OPIHI_INT;
     147  if (in[0].elements.Ptr) {
     148    if (in[0].type == OPIHI_FLT) {
     149      ALLOCATE (out[0].elements.Flt, opihi_flt, out[0].Nelements);
     150      memcpy (out[0].elements.Flt, in[0].elements.Flt, out[0].Nelements*sizeof(opihi_flt));
     151      out[0].type = OPIHI_FLT;
     152    } else {
     153      ALLOCATE (out[0].elements.Int, opihi_int, out[0].Nelements);
     154      memcpy (out[0].elements.Int, in[0].elements.Int, out[0].Nelements*sizeof(opihi_int));
     155      out[0].type = OPIHI_INT;
     156    }
    160157  }
    161158  return (TRUE);
     
    170167  return (TRUE);
    171168}
     169
    172170int MoveVector (Vector *out, Vector *in) {
    173171  int i, j;
    174172
    175   free (out[0].elements);
    176   out[0].Nelements   = in[0].Nelements;
    177   out[0].elements    = in[0].elements;
    178   out[0].elementsInt = in[0].elementsInt;
    179   out[0].type        = in[0].type;
     173  if (out[0].elements.Ptr) free (out[0].elements.Ptr);
     174  out[0].Nelements    = in[0].Nelements;
     175  out[0].elements.Ptr = in[0].elements.Ptr;
     176  out[0].type         = in[0].type;
    180177
    181178  /* delete vector entry from vector list, if it exists */
Note: See TracChangeset for help on using the changeset viewer.