IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 23, 2020, 11:34:29 AM (6 years ago)
Author:
eugene
Message:

add string-vector ops

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c

    r40487 r41363  
    3030
    3131// A & B value types all have 2 possible values
     32//
    3233# define TWO_OP(A,B,FUNC) {                                             \
    3334    if ((stack[i - 2].type == A) && (stack[i - 1].type == B)) {         \
     
    163164        }
    164165
     166        // TWO_OP(A,B,OP) : A,B types all have a main value and a secondary value at A+1 or B+1:
     167        // ST_MATRIX -> ST_MATRIX_TMP
     168        // ST_VECTOR -> ST_VECTOR_TMP
     169        // ST_SCALAR_INT -> ST_SCALAR_FLT
    165170        status = FALSE;
    166171        TWO_OP (ST_MATRIX,ST_MATRIX,MM_binary);
    167172        TWO_OP (ST_MATRIX,ST_VECTOR,MV_binary);
    168         TWO_OP (ST_MATRIX,ST_SCALAR_INT,MS_binary);
     173        TWO_OP (ST_MATRIX,ST_SCALAR_INT,MS_binary); // handles ST_SCALAR_INT and ST_SCALAR_FLT
    169174
    170175        TWO_OP (ST_VECTOR,ST_MATRIX,VM_binary);
    171176        TWO_OP (ST_VECTOR,ST_VECTOR,VV_binary);
    172         TWO_OP (ST_VECTOR,ST_SCALAR_INT,VS_binary);
    173 
    174         TWO_OP (ST_SCALAR_INT,ST_MATRIX,SM_binary);
    175         TWO_OP (ST_SCALAR_INT,ST_VECTOR,SV_binary);
    176         TWO_OP (ST_SCALAR_INT,ST_SCALAR_INT,SS_binary);     
    177 
    178         TWO_OP (ST_SCALAR_FLT,ST_MATRIX,SM_binary);
    179         TWO_OP (ST_SCALAR_FLT,ST_VECTOR,SV_binary);
    180         TWO_OP (ST_SCALAR_FLT,ST_SCALAR_INT,SS_binary);     
     177        TWO_OP (ST_VECTOR,ST_SCALAR_INT,VS_binary); // handles ST_SCALAR_INT and ST_SCALAR_FLT
     178
     179        TWO_OP (ST_SCALAR_INT,ST_MATRIX,SM_binary); // handles ST_SCALAR_INT and ST_SCALAR_FLT
     180        TWO_OP (ST_SCALAR_INT,ST_VECTOR,SV_binary); // handles ST_SCALAR_INT and ST_SCALAR_FLT
     181        TWO_OP (ST_SCALAR_INT,ST_SCALAR_INT,SS_binary);       // handles ST_SCALAR_INT and ST_SCALAR_FLT
     182
     183//      XXX: this block is not needed
     184//      TWO_OP (ST_SCALAR_FLT,ST_MATRIX,SM_binary);
     185//      TWO_OP (ST_SCALAR_FLT,ST_VECTOR,SV_binary);
     186//      TWO_OP (ST_SCALAR_FLT,ST_SCALAR_INT,SS_binary);     
     187
     188        TWO_OP (ST_VECTOR,ST_STRING,LW_binary);     
     189        TWO_OP (ST_STRING,ST_VECTOR,WL_binary);     
    181190
    182191        TWO_OP (ST_STRING,ST_STRING,WW_binary);     
     
    350359}
    351360
     361// strip off surrounding " and return newly allocated string
     362char *clean_stack_name (char *name) {
     363
     364  if (!name) return name;
     365
     366  char *tmpname = name;
     367  if (name[0] == '"') tmpname ++;
     368
     369  char *output = strcreate (tmpname);
     370
     371  int Nchar = strlen(output);
     372  if (Nchar == 0) return output; // empty string
     373
     374  // squash ending quotes:
     375  if (output[Nchar - 1] == '"') output[Nchar - 1] = 0;
     376
     377  return output;
     378}
     379
    352380void assign_stack (StackVar *stack, char *name, StackVarType type) {
    353   stack->name = strcreate (name);
     381  stack->name = strcreate(name);
    354382  stack->type = type;
    355383}
Note: See TracChangeset for help on using the changeset viewer.