Ejemplo n.º 1
0
static int on_config_header_2arg(h2o_configurator_command_t *cmd, h2o_configurator_context_t *ctx, int cmd_id, yoml_t *node)
{
    h2o_iovec_t *name, value;

    if (extract_name_value(node->data.scalar, &name, &value) != 0) {
        h2o_configurator_errprintf(cmd, node, "failed to parse the value; should be in form of `name: value`");
        return -1;
    }
    if (add_cmd(cmd, node, cmd_id, name, value) != 0)
        return -1;
    return 0;
}
Ejemplo n.º 2
0
//---------------------------------------------------------------
// START FUNC DECL
int 
f1f2f3f4opf5(
	     char *tbl,
	     char *f1,
	     char *f2,
	     char *f3,
	     char *f4,
	     char *str_op_spec,
	     char *f5
	     )
// STOP FUNC DECL
{
  int status = 0;

  char *f1_X = NULL; size_t f1_nX = 0;
  char *nn_f1_X = NULL; size_t nn_f1_nX = 0;
  char *f2_X = NULL; size_t f2_nX = 0;
  char *nn_f2_X = NULL; size_t nn_f2_nX = 0;
  char *f3_X = NULL; size_t f3_nX = 0;
  char *nn_f3_X = NULL; size_t nn_f3_nX = 0;
  char *f4_X = NULL; size_t f4_nX = 0;
  char *nn_f4_X = NULL; size_t nn_f4_nX = 0;

  char *out_X = NULL; size_t out_nX = 0;
  char *nn_out_X = NULL; size_t nn_out_nX = 0;

  char *opfile = NULL, *nn_opfile = NULL; FILE *ofp = NULL;

  FLD_TYPE *f1_meta = NULL, *nn_f1_meta = NULL;
  FLD_TYPE *f2_meta = NULL, *nn_f2_meta = NULL;
  FLD_TYPE *f3_meta = NULL, *nn_f3_meta = NULL;
  FLD_TYPE *f4_meta = NULL, *nn_f4_meta = NULL;
  long long nR; 
  int tbl_id = INT_MIN;
  int f1_id = INT_MIN, f2_id = INT_MIN, f3_id = INT_MIN, 
      f4_id = INT_MIN, f5_id = INT_MIN;
  int nn_f1_id = INT_MIN, nn_f2_id = INT_MIN, nn_f3_id = INT_MIN, 
      nn_f4_id = INT_MIN, nn_f5_id = INT_MIN;
  char str_meta_data[1024];
  bool is_any_null = false;
  float *f1ptr = NULL, *f2ptr = NULL, *f3ptr = NULL, *f4ptr = NULL; 
  float *foutptr = NULL; char *nn_out = NULL;
  char *op = NULL;
  //----------------------------------------------------------------
  if ( ( tbl == NULL ) || ( *tbl == '\0' ) ) { go_BYE(-1); }
  if ( ( f1 == NULL ) || ( *f1 == '\0' ) ) { go_BYE(-1); }
  if ( ( f2 == NULL ) || ( *f2 == '\0' ) ) { go_BYE(-1); }
  if ( ( f3 == NULL ) || ( *f3 == '\0' ) ) { go_BYE(-1); }
  if ( ( f4 == NULL ) || ( *f4 == '\0' ) ) { go_BYE(-1); }
  if ( ( f5 == NULL ) || ( *f5 == '\0' ) ) { go_BYE(-1); }
  if ( ( str_op_spec == NULL ) || ( *str_op_spec == '\0' ) ) { go_BYE(-1); }


  zero_string(str_meta_data, 1024);
  //--------------------------------------------------------
  status = extract_name_value(str_op_spec, "op=", ":", &op);
  cBYE(status);
  if ( op == NULL ) { go_BYE(-1); }
  //--------------------------------------------------------
  status = is_tbl(tbl, &tbl_id); cBYE(status);
  chk_range(tbl_id, 0, g_n_tbl);
  nR = g_tbl[tbl_id].nR;
  //--------------------------------------------------------
  /* Get information for field f1 */
  status = is_fld(NULL, tbl_id, f1, &f1_id);
  f1_meta = &(g_fld[f1_id]);
  status = rs_mmap(f1_meta->filename, &f1_X, &f1_nX, 0); cBYE(status);
  nn_f1_id = f1_meta->nn_fld_id;
  if ( nn_f1_id >= 0 ) {
    nn_f1_meta = &(g_fld[nn_f1_id]);
    status = rs_mmap(nn_f1_meta->filename, &nn_f1_X, &nn_f1_nX, 0); 
    cBYE(status);
  }
  //--------------------------------------------------------
  /* Get information for field f2 */
  status = is_fld(NULL, tbl_id, f2, &f2_id);
  f2_meta = &(g_fld[f2_id]);
  status = rs_mmap(f2_meta->filename, &f2_X, &f2_nX, 0); cBYE(status);
  nn_f2_id = f2_meta->nn_fld_id;
  if ( nn_f2_id >= 0 ) {
    nn_f2_meta = &(g_fld[nn_f2_id]);
    status = rs_mmap(nn_f2_meta->filename, &nn_f2_X, &nn_f2_nX, 0); 
    cBYE(status);
  }
  //--------------------------------------------------------
  /* Get information for field f3 */
  status = is_fld(NULL, tbl_id, f3, &f3_id);
  f3_meta = &(g_fld[f3_id]);
  status = rs_mmap(f3_meta->filename, &f3_X, &f3_nX, 0); cBYE(status);
  nn_f3_id = f3_meta->nn_fld_id;
  if ( nn_f3_id >= 0 ) {
    nn_f3_meta = &(g_fld[nn_f3_id]);
    status = rs_mmap(nn_f3_meta->filename, &nn_f3_X, &nn_f3_nX, 0); 
    cBYE(status);
  }
  //--------------------------------------------------------
  /* Get information for field f4 */
  status = is_fld(NULL, tbl_id, f4, &f4_id);
  f4_meta = &(g_fld[f4_id]);
  status = rs_mmap(f4_meta->filename, &f4_X, &f4_nX, 0); cBYE(status);
  nn_f4_id = f4_meta->nn_fld_id;
  if ( nn_f4_id >= 0 ) {
    nn_f4_meta = &(g_fld[nn_f4_id]);
    status = rs_mmap(nn_f4_meta->filename, &nn_f4_X, &nn_f4_nX, 0); 
    cBYE(status);
  }
  //--------------------------------------------------------
  if ( strcmp(f1_meta->fldtype, "float") != 0 ) { go_BYE(-1); }
  if ( strcmp(f2_meta->fldtype, "float") != 0 ) { go_BYE(-1); }
  if ( strcmp(f3_meta->fldtype, "float") != 0 ) { go_BYE(-1); }
  if ( strcmp(f4_meta->fldtype, "float") != 0 ) { go_BYE(-1); }
  //--------------------------------------------------------
  f1ptr = (float *)f1_X;
  f2ptr = (float *)f2_X;
  f3ptr = (float *)f3_X;
  f4ptr = (float *)f4_X;
  //--------------------------------------------------------
  // Create output file 
  long long filesz = sizeof(float) * nR;
  status = open_temp_file(&ofp, &opfile, filesz); cBYE(status); fclose_if_non_null(ofp);
  status = mk_file(opfile, filesz); cBYE(status);
  status = rs_mmap(opfile, &out_X, &out_nX, 1); cBYE(status);
  foutptr = (float*)out_X;
  //--------------------------------------------------------
  // Create nn field for output file 
  long long nnfilesz = sizeof(char) * nR;
  status = open_temp_file(&ofp, &nn_opfile, nnfilesz); cBYE(status); 
  fclose_if_non_null(ofp);
  status = mk_file(nn_opfile, filesz); cBYE(status);
  status = rs_mmap(nn_opfile, &nn_out_X, &nn_out_nX, 1); cBYE(status);
  nn_out = (char*)nn_out_X;
  //--------------------------------------------------------
  if ( strcmp(op, "lat_long_dist") == 0 ) {
    for ( long long i = 0; i < nR; i++ ) { 
      if ( ( nn_f1_X != NULL ) && ( nn_f1_X[i] == 0 ) ) {
	is_any_null = true; foutptr[i] = 0; nn_out[i] = 0; continue;
      }
      if ( ( nn_f2_X != NULL ) && ( nn_f2_X[i] == 0 ) ) {
	is_any_null = true; foutptr[i] = 0; nn_out[i] = 0; continue;
      }
      if ( ( nn_f3_X != NULL ) && ( nn_f3_X[i] == 0 ) ) {
	is_any_null = true; foutptr[i] = 0; nn_out[i] = 0; continue;
      }
      if ( ( nn_f4_X != NULL ) && ( nn_f4_X[i] == 0 ) ) {
	is_any_null = true; foutptr[i] = 0; nn_out[i] = 0; continue;
      }
      if ( ( f1ptr[i] < -90  ) || ( f1ptr[i] > 90  ) ) { go_BYE(-1); }
      if ( ( f2ptr[i] < -180 ) || ( f2ptr[i] > 180 ) ) { go_BYE(-1); }
      if ( ( f3ptr[i] < -90  ) || ( f3ptr[i] > 90  ) ) { go_BYE(-1); }
      if ( ( f4ptr[i] < -180 ) || ( f4ptr[i] > 180 ) ) { go_BYE(-1); }
      status = latlong_distance(f1ptr[i], f2ptr[i], f3ptr[i], f4ptr[i],
				&(foutptr[i]));
      cBYE(status);
      nn_out[i] = TRUE;
    }
  }
  sprintf(str_meta_data, "filename=%s:fldtype=float:n_sizeof=4", opfile);
  status = add_fld(tbl, f5, str_meta_data, &f5_id);
  cBYE(status);
  if ( is_any_null ) {
    status = add_aux_fld(tbl, f5, nn_opfile, "nn", &nn_f5_id);
    cBYE(status);
  }
  else {
    unlink(nn_opfile);
    free_if_non_null(nn_opfile);
  }
BYE:
  rs_munmap(f1_X, f1_nX); rs_munmap(nn_f1_X, nn_f1_nX);
  rs_munmap(f2_X, f2_nX); rs_munmap(nn_f2_X, nn_f2_nX);
  rs_munmap(f3_X, f3_nX); rs_munmap(nn_f3_X, nn_f3_nX);
  rs_munmap(f4_X, f4_nX); rs_munmap(nn_f4_X, nn_f4_nX);
  rs_munmap(out_X, out_nX); rs_munmap(nn_out_X, nn_out_nX);
  free_if_non_null(opfile);
  free_if_non_null(nn_opfile);
  free_if_non_null(op);
  return(status);
}
Ejemplo n.º 3
0
//---------------------------------------------------------------
// START FUNC DECL
int
f1opf2(
    char *tbl,
    char *f1,
    char *str_op_spec,
    char *f2
)
// STOP FUNC DECL
{
    int status = 0;
    char *f1_X = NULL;
    size_t f1_nX = 0;
    char *nn_f1_X = NULL;
    size_t nn_f1_nX = 0;
    char *sz_f1_X = NULL;
    size_t sz_f1_nX = 0;
    FLD_TYPE *f1_meta = NULL, *nn_f1_meta = NULL, *sz_f1_meta = NULL;
    long long nR;
    int tbl_id = INT_MIN, f1_id = INT_MIN, nn_f1_id = INT_MIN, sz_f1_id = INT_MIN;
    int         f2_id = INT_MIN, nn_f2_id = INT_MIN, sz_f2_id = INT_MIN;
    char str_meta_data[1024];
    int f1type;
    char *op = NULL, *str_val = NULL;
    FILE *ofp = NULL;
    char *opfile = NULL;
    FILE *nn_ofp = NULL;
    char *nn_opfile = NULL;
    FILE *sz_ofp = NULL;
    char *sz_opfile = NULL;
    char *xform_enum = NULL, *hash_algo = NULL;
    //----------------------------------------------------------------
    if ( ( tbl == NULL ) || ( *tbl == '\0' ) ) {
        go_BYE(-1);
    }
    if ( ( f1 == NULL ) || ( *f1 == '\0' ) ) {
        go_BYE(-1);
    }
    if ( ( f2 == NULL ) || ( *f2 == '\0' ) ) {
        go_BYE(-1);
    }
    if ( ( str_op_spec == NULL ) || ( *str_op_spec == '\0' ) ) {
        go_BYE(-1);
    }
    zero_string(str_meta_data, 1024);
    //--------------------------------------------------------
    status = extract_name_value(str_op_spec, "op=", ":", &op);
    cBYE(status);
    if ( op == NULL ) {
        go_BYE(-1);
    }
    //--------------------------------------------------------
    status = chk_if_ephemeral(&f2);
    cBYE(status);
    status = is_tbl(tbl, &tbl_id);
    cBYE(status);
    chk_range(tbl_id, 0, g_n_tbl);
    nR = g_tbl[tbl_id].nR;
    status = is_fld(NULL, tbl_id, f1, &f1_id);
    cBYE(status);
    chk_range(f1_id, 0, g_n_fld);
    f1_meta = &(g_fld[f1_id]);
    status = rs_mmap(f1_meta->filename, &f1_X, &f1_nX, 0);
    cBYE(status);
    // Get nn field for f1 if if it exists
    nn_f1_id = g_fld[f1_id].nn_fld_id;
    if ( nn_f1_id >= 0 ) {
        nn_f1_meta = &(g_fld[nn_f1_id]);
        status = rs_mmap(nn_f1_meta->filename, &nn_f1_X, &nn_f1_nX, 0);
        cBYE(status);
    }
    //---------------------------------------------
    status = mk_ifldtype(f1_meta->fldtype, &f1type);
    /* TODO: Why do we get an error for 'char string' ? */
    // If f1 type is 'char string', then get sz field
    if ( strcmp(f1_meta->fldtype, "char string") == 0 ) {
        sz_f1_id = g_fld[f1_id].sz_fld_id;
        chk_range(sz_f1_id, 0, g_n_fld);
        sz_f1_meta = &(g_fld[sz_f1_id]);
        status = rs_mmap(sz_f1_meta->filename, &sz_f1_X, &sz_f1_nX, 0);
        cBYE(status);
    }
    //--------------------------------------------------------
    if ( strcmp(op, "xform") == 0 ) {
        bool is_some_null;
        status = open_temp_file(&ofp, &opfile, 0);
        cBYE(status);
        status = open_temp_file(&nn_ofp, &nn_opfile, 0);
        cBYE(status);
        status = open_temp_file(&sz_ofp, &sz_opfile, 0);
        cBYE(status);
        status = str_xform(nR, f1_X, (int *)sz_f1_X, nn_f1_X, str_op_spec,
                           ofp, nn_ofp, sz_ofp, &is_some_null);
        cBYE(status);
        fclose_if_non_null(ofp);
        fclose_if_non_null(nn_ofp);
        fclose_if_non_null(sz_ofp);
        sprintf(str_meta_data, "filename=%s:fldtype=char string:n_sizeof=0",
                opfile);
        status = add_fld(tbl, f2, str_meta_data, &f2_id);
        cBYE(status);
        status = add_aux_fld(tbl, f2, sz_opfile, "sz", &sz_f2_id);
        cBYE(status);
        if ( is_some_null ) {
            status = add_aux_fld(tbl, f2, nn_opfile, "nn", &nn_f2_id);
            cBYE(status);
        }
        else {
            unlink(nn_opfile);
        }
    }
    else if ( strcmp(op, "hash") == 0 ) {
        int hash_len;
        char *endptr = NULL;

        status = extract_name_value(str_op_spec, "len=", ":", &str_val);
        cBYE(status);
        if  ( str_val == NULL ) {
            go_BYE(-1);
        }
        hash_len = strtol(str_val, &endptr, 10);
        if ( *endptr != '\0' ) {
            go_BYE(-1);
        }

        status = extract_name_value(str_op_spec, "hash_algo=", ":", &hash_algo);
        cBYE(status);

        status = open_temp_file(&ofp, &opfile, 0);
        cBYE(status);
        status = f1opf2_hash(hash_algo, nR, f1_X, f1_nX, (int *)sz_f1_X,
                             f1_meta->n_sizeof, nn_f1_X, hash_len, ofp);
        cBYE(status);
        fclose_if_non_null(ofp);
        sprintf(str_meta_data, "filename=%s", opfile);
        switch ( hash_len ) {
        case 4 :
            strcat(str_meta_data, ":fldtype=int:n_sizeof=4");
            break;
        case 8 :
            strcat(str_meta_data, ":fldtype=long long:n_sizeof=8");
            break;
        default :
            go_BYE(-1);
            break;
        }
        fclose_if_non_null(ofp);
        status = add_fld(tbl, f2, str_meta_data, &f2_id);
        cBYE(status);
    }
    else if ( ( strcmp(op, "conv") == 0 ) ||
              ( strcmp(op, "dateconv" ) == 0 ) ||
              ( strcmp(op, "bitcount" ) == 0 ) ||
              ( strcmp(op, "sqrt" ) == 0 ) ||
              ( strcmp(op, "!" ) == 0 ) ||
              ( strcmp(op, "++" ) == 0 ) ||
              ( strcmp(op, "--" ) == 0 ) ||
              ( strcmp(op, "~" ) == 0 )
            ) {
        status = vec_f1opf2(nR, f1type, str_meta_data,
                            f1_X, nn_f1_X, sz_f1_X, op, str_op_spec, &opfile, &nn_opfile);
        cBYE(status);
        status = add_fld(tbl, f2, str_meta_data, &f2_id);
        cBYE(status);
        if ( nn_opfile != NULL ) {
            status = add_aux_fld(tbl, f2, nn_opfile, "nn", &nn_f2_id);
            cBYE(status);
        }
    }
    else if ( strcmp(op, "shift") == 0 ) {
        int ival;
        char *endptr = NULL;
        status = extract_name_value(str_op_spec, "val=", ":", &str_val);
        cBYE(status);
        ival = strtol(str_val, &endptr, 10);
        if ( *endptr != '\0' ) {
            fprintf(stderr, "invalid shift specifier = [%s] \n", str_val);
            go_BYE(-1);
        }
        if ( ( ival == 0 ) || ( ival > MAX_SHIFT ) ||
                (  ival < -MAX_SHIFT ) || (ival >= nR )) {
            fprintf(stderr, "shift = [%d] is out of bounds \n", ival);
            go_BYE(-1);
        }

        status = open_temp_file(&ofp, &opfile, 0);
        cBYE(status);
        status = open_temp_file(&nn_ofp, &nn_opfile, 0);
        cBYE(status);
        status = f1opf2_shift(f1_X, nn_f1_X, nR, f1_meta->fldtype, ival,
                              ofp, nn_ofp);
        cBYE(status);
        fclose_if_non_null(ofp);
        fclose_if_non_null(nn_ofp);
        sprintf(str_meta_data, "filename=%s:fldtype=%s:n_sizeof=%d",opfile,
                f1_meta->fldtype, f1_meta->n_sizeof);
        status = add_fld(tbl, f2, str_meta_data, &f2_id);
        cBYE(status);
        status = add_aux_fld(tbl, f2, nn_opfile, "nn", &nn_f2_id);
        cBYE(status);
    }
    else if ( strcmp(op, "cum") == 0 ) {
        /* TODO: Document. If you do a cum, resultant field is all def */
        char *new_fld_type = NULL;
        int optype, n_sizeof;
        char *str_reset_on = NULL, *str_reset_to = NULL, *endptr = NULL;
        long long reset_on = 0, reset_to = 0;
        bool is_reset = false;
        status = extract_name_value(str_op_spec, "newtype=", ":", &new_fld_type);
        cBYE(status);
        status = extract_name_value(str_op_spec, "reset_on=", ":",
                                    &str_reset_on);
        cBYE(status);
        if ( str_reset_on != NULL ) {
            reset_on = strtoll(str_reset_on, &endptr, 10);
            if ( *endptr != '\0' ) {
                go_BYE(-1);
            }
            is_reset = true;
            status = extract_name_value(str_op_spec, "reset_to=", ":",
                                        &str_reset_to);
            cBYE(status);
            if ( str_reset_to == NULL ) {
                go_BYE(-1);
            }
            reset_to = strtoll(str_reset_to, &endptr, 10);
            if ( *endptr != '\0' ) {
                go_BYE(-1);
            }
        }
        if ( new_fld_type == NULL ) {
            optype = f1type;
            new_fld_type = strdup(f1_meta->fldtype);
            n_sizeof = f1_meta->n_sizeof;
        }
        else {
            if ( strcmp(new_fld_type, "int") == 0 ) {
                optype = FLDTYPE_INT;
                n_sizeof = sizeof(int);
            }
            else if ( strcmp(new_fld_type, "long long") == 0 ) {
                optype = FLDTYPE_LONGLONG;
                n_sizeof = sizeof(long long);
            }
            else {
                go_BYE(-1);
            }
        }
        status = f1opf2_cum(f1_X, nR, f1type, optype, is_reset,
                            reset_on, reset_to, &opfile);
        cBYE(status);
        sprintf(str_meta_data, "filename=%s:fldtype=%s:n_sizeof=%d",opfile,
                new_fld_type, n_sizeof);
        status = add_fld(tbl, f2, str_meta_data, &f2_id);
        cBYE(status);
        free_if_non_null(new_fld_type);
        free_if_non_null(str_reset_on);
        free_if_non_null(str_reset_to);
    }
    else {
        fprintf(stderr, "Invalid op = [%s] \n", op);
        go_BYE(-1);
    }
BYE:
    fclose_if_non_null(ofp);
    fclose_if_non_null(nn_ofp);
    g_write_to_temp_dir = false;
    rs_munmap(f1_X, f1_nX);
    rs_munmap(nn_f1_X, nn_f1_nX);
    rs_munmap(sz_f1_X, sz_f1_nX);
    free_if_non_null(op);
    free_if_non_null(xform_enum);
    free_if_non_null(hash_algo);
    free_if_non_null(str_val);
    free_if_non_null(opfile);
    free_if_non_null(nn_opfile);
    free_if_non_null(sz_opfile);
    return(status);
}