Example #1
0
int decode_dset_name(char *dset_name, char *type, int *nels, int *strlen)
{
	syslog(LOG_DEBUG, "create_dataset");
	int status = -1; // assume failure
	char  *saveptr;
	/*
	for(j = 1, str1 = dset_name; ; j++ str1 = NULL){
		token = strtok_r(str1, ":", &saveptr);
		if(token == NULL) break:
		*/
	char *varname = strtok_r(dset_name, ":", &saveptr);
	if(varname == NULL || dset_name[0] == ':'){
		syslog(LOG_ERR, "ERR: varname invalid: <%s>", dset_name);
		goto cleanup;
	}

	char *type_spec = strtok_r(NULL, "\0", &saveptr);
	if(type_spec==0){
		error(0, -1,  "type spec is NULL");
		goto cleanup;
	}

	*type = type_spec[0];
	type_spec++;
	//int nels, strlen;
	switch(*type) {
		case 'd':
		case 'D' : 
			sscanf(type_spec, "%d", nels); break;
		case 's':
		case 'S' :
			sscanf(type_spec, "%dx%d", nels, strlen); break;
		default:
			  error(0, -1, "Dataset type unsupported: <%c>", type_spec[0]);
			  goto cleanup;
	}

	if(*nels == 0) GOOF("Cannot request 0-length array");
	*type = tolower(*type);
	if(*type == 's' && *strlen ==0) GOOF("Cannot request 0-width string");

	//printf("type_spec: <%s>\n", type_spec);
	
	status = 0; //success
cleanup:
	return status;
}
Example #2
0
int create_dataset(hid_t loc_id, char *dset_name)
{
	int status = -1; //assume failure
	char type;
	int nels, strlen;
	status = decode_dset_name(dset_name, &type, &nels, &strlen);
	if(status !=0) GOOF("create_dataset had problems decoding dataset spec");

	//puts("TODO only handles double just now");

	hsize_t dims[1] = {nels};
	//dims[0] = ds.size();
	hid_t dspace = H5Screate_simple(1, dims, NULL);


	// TODO fix goofy creation for : create5 sharelock.h5 go7:S100/10
	hid_t dtype;
	switch(type){
		case 'd': dtype = H5Tcopy(H5T_NATIVE_DOUBLE); break;
		case 's': 
			  dtype = H5Tcopy(H5T_C_S1);
			  H5Tset_size(dtype, strlen);
			  break;
		default:
			  error(0, -1, "TODO unhandled type");
	}


	hid_t dset = H5Dcreate2(loc_id, dset_name, dtype, dspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);


	//hid_t dset = H5Dcreate2(loc_id, dset_name, H5T_NATIVE_DOUBLE, dspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
	//H5Dwrite(dset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &ds[0]);

	H5Dclose(dset);
	H5Sclose(dspace);


	printf("varname: <%s>, type <%c>, nels %d, strlen %d\n", dset_name, type, nels, strlen);
	status = 0;
cleanup:
	return status;
}
Example #3
0
rboolean CPPLIB( ts_equiv )(    // TEST IF TYPE SIG.S ARE EQUIVALENT
    RT_TYPE_SIG tgt,            // - target type signature
    RT_TYPE_SIG src,            // - source type signature
    rboolean zero_thrown )      // - TRUE ==> zero was thrown
{
    rboolean retn;              // - TRUE ==> conversion possible

    if( tgt == NULL ) {
        retn = TRUE;
    } else {
        tgt = CPPLIB( ts_refed )( tgt );
        retn = FALSE;
        if( zero_thrown ) {
            switch( tgt->hdr.type ) {
              case THROBJ_PTR_SCALAR :
              case THROBJ_VOID_STAR :
              case THROBJ_PTR_CLASS :
                retn = TRUE;
                break;
            }
        }
        if( ! retn ) {
            src = CPPLIB( ts_refed )( src );
            if( src == tgt ) {
                retn = TRUE;
            } else if( tgt->hdr.type != src->hdr.type ) {
                retn = FALSE;
            } else switch( tgt->hdr.type ) {
              case THROBJ_VOID_STAR :
              case THROBJ_ANYTHING :
                retn = TRUE;
                break;
              case THROBJ_PTR_SCALAR :
                if( tgt->base.indirect != src->base.indirect ) {
                    retn = FALSE;
                    break;
                }
                // drops thru
              case THROBJ_PTR_CLASS :
                retn = CPPLIB( ts_equiv )( CPPLIB( ts_pnted )( tgt )
                                         , CPPLIB( ts_pnted )( src )
                                         , zero_thrown );
                break;
              case THROBJ_CLASS :
              case THROBJ_CLASS_VIRT :
                if( tgt->clss.size == src->clss.size ) {
                    if( 0 == strcmp( tgt->clss.name, src->clss.name ) ) {
                        retn = TRUE;
                    } else {
                        retn = FALSE;
                    }
                } else {
                    retn = FALSE;
                }
                break;
              case THROBJ_PTR_FUN :
              case THROBJ_SCALAR :
                if( tgt->scalar.size == src->scalar.size ) {
                    if( 0 == strcmp( tgt->scalar.name, src->scalar.name ) ) {
                        retn = TRUE;
                    } else {
                        retn = FALSE;
                    }
                } else {
                    retn = FALSE;
                }
                break;
              default :
                GOOF( "TsEquiv -- bad THROBJ_..." );
            }
        }
    }
    return retn;
}