JNIEXPORT jint JNICALL
Java_hdf_hdflib_HDFLibrary_Vinsert
(JNIEnv *env, jclass clss, jlong vgroup_id, jint v_id)
{
    int32 rval;

    rval = Vinsert((int32) vgroup_id, (int32) v_id);
    if (rval == FAIL)
        CALL_ERROR_CHECK();

    return (jint)rval;
}
Beispiel #2
0
static int do_groups(void) 
{
     
     int32 vg0_id,    /* vgroup identifier */
           vg1_id,    /* vgroup identifier */
           vg2_id,    /* vgroup identifier */
           file1_id;  /* HDF file identifier */
     
     /* create a HDF file */
     if ((file1_id = Hopen (FILE7_NAME, DFACC_CREATE, (int16)0))<0)
     {
         printf("Error: Could not create file <%s>\n",FILE7_NAME);
         return FAIL;
     }
     
     /* initialize the V interface */
     if (Vstart (file1_id)==FAIL)
     {
         printf( "Could not start VG\n");
         return FAIL;
     }
     
     /* create a vgroup */
     vg0_id = Vattach (file1_id, -1, "w");
     if (Vsetname (vg0_id, "g0")==FAIL)
     {
         printf( "Could not name group\n");
         goto out;
     }
     
     /* create the second vgroup */
     vg1_id = Vattach (file1_id, -1, "w");
     if (Vsetname (vg1_id, "g1")==FAIL)
     {
         printf( "Could not name group\n");
         goto out;
     }
     
     /* create the third vgroup */
     vg2_id = Vattach (file1_id, -1, "w");
     if (Vsetname (vg2_id, "g1.1")==FAIL)
     {
         printf( "Could not name group\n");
         goto out;
     }
  
     if (Vinsert (vg0_id, vg1_id)==FAIL)
     {
         printf( "Could not insert VG\n");
         goto out;
     }
     
     if (Vinsert (vg0_id, vg2_id)==FAIL)
     {
         printf( "Could not insert VG\n");
         goto out;
     }
     
     if (Vinsert (vg1_id, vg2_id)==FAIL)
     {
         printf( "Could not insert VG\n");
         goto out;
     }
     
     if (Vinsert (vg2_id, vg1_id)==FAIL)
     {
         printf( "Could not insert VG\n");
         goto out;
     }
     
     /* terminate access to the vgroup */
     if (Vdetach (vg0_id)==FAIL)
     {
         printf( "Could not close group\n");
         goto out;
     }
     
     /* terminate access to the vgroup */
     if (Vdetach (vg1_id)==FAIL)
     {
         printf( "Could not close group\n");
         goto out;
     }
     
     /* terminate access to the vgroup */
     if (Vdetach (vg2_id)==FAIL)
     {
         printf( "Could not close group\n");
         goto out;
     }
     
     /* terminate access to the V interface */
     if (Vend (file1_id)==FAIL)
     {
         printf( "Could not end VG\n");
         goto out;
     }
     
     /* close the HDF file */
     if (Hclose (file1_id)==FAIL)
     {
         printf( "Could not close file\n");
         return FAIL;
     }
     
     return SUCCEED;
     
out:
     printf("Error...Exiting...\n");
     return FAIL;
     
}
Beispiel #3
0
int vgroup_insert(int32 infile_id,
                  int32 outfile_id,
                  int32 sd_id,             /* SD interface identifier */
                  int32 sd_out,            /* SD interface identifier */
                  int32 gr_id,             /* GR interface identifier */
                  int32 gr_out,            /* GR interface identifier */
                  int32 vgroup_id_out_par, /* output parent group ID */
                  char*path_name,          /* absolute path for input group name */          
                  int32* in_tags,          /* tag list for parent group */
                  int32* in_refs,          /* ref list for parent group */
                  int npairs,              /* number tag/ref pairs for parent group */
                  list_table_t *list_tbl,
                  dim_table_t *td1,
                  dim_table_t *td2,
                  options_t *options)
{
    int32 vg_id;             /* vgroup identifier for opened group in input */
    int32 ntagrefs;              /* number of tag/ref pairs in a vgroup */
    int32 *tags=NULL;            /* buffer to hold the tag numbers of vgroups   */
    int32 *refs=NULL;            /* buffer to hold the ref numbers of vgroups   */
    int32 vgroup_id_out =-1;         /* vgroup identifier for the created group in output */
    char  *vg_name;
    char  *vg_class;
    char  *path=NULL;
    uint16 name_len;
    int   visited;
    int32 tag;                   
    int32 ref; 
    int   i;

    
    for ( i = 0; i < npairs; i++ ) 
    {       
        tag = in_tags[i];
        ref = in_refs[i];
        
        switch(tag) 
        {
        /*-------------------------------------------------------------------------
         * DFTAG_VG
         *-------------------------------------------------------------------------
         */
        case DFTAG_VG: 

            visited = list_table_search(list_tbl,DFTAG_VG,ref);
            
           /*-------------------------------------------------------------------------
            * open input
            *-------------------------------------------------------------------------
            */
                    
            vg_id = Vattach (infile_id, ref, "r");

	    /* Get vgroup's name */
            if (Vgetnamelen(vg_id, &name_len)==FAIL)
            {
                printf("Error: Could not get name length for group with ref <%d>\n", ref);
                goto out;
            }
            vg_name = (char *) HDmalloc(sizeof(char) * (name_len+1));
            if (Vgetname (vg_id, vg_name)==FAIL)
            {
                printf( "Could not get name for group\n");
                goto out;
                
            }

	    /* Get vgroup's class name */
            if (Vgetclassnamelen(vg_id, &name_len)==FAIL)
            {
                printf("Error: Could not get name length for group with ref <%d>\n", ref);
                goto out;
            }

            vg_class = (char *) HDmalloc(sizeof(char) * (name_len+1));
            if (Vgetclass (vg_id, vg_class)==FAIL)
            {
                printf( "Could not get class for group\n");
                goto out;
            }
            
            /* ignore reserved HDF groups/vdatas */
            if( is_reserved(vg_class))
            {
                if (Vdetach (vg_id)==FAIL)
                {
                    printf( "Could not detach group\n");
                    goto out;
                }
                continue;
            }
            if(strcmp(vg_name,GR_NAME)==0) 
            {
                if (Vdetach (vg_id)==FAIL)
                {
                    printf( "Could not detach group\n");
                    goto out;
                }
                continue;
            }
            
            
           /*-------------------------------------------------------------------------
            * create the group in output or create the link
            *-------------------------------------------------------------------------
            */
         
            if (options->trip==1)
            {
            
                if ( visited < 0 )
                    
                {
                    
                   /* 
                    * create the group in the output file.  the vgroup reference number 
                    * is set to -1 for creating and the access mode is "w" for writing 
                    */
                    vgroup_id_out = Vattach (outfile_id, -1, "w");
                    if (Vsetname (vgroup_id_out, vg_name)==FAIL)
                    {
                        printf("Error: Could not create group <%s>\n", vg_name);
                        goto out;
                    }
                    if (Vsetclass (vgroup_id_out, vg_class)==FAIL)
                    {
                        printf("Error: Could not create group <%s>\n", vg_name);
                        goto out;
                    }
                    
                    if (copy_vgroup_attrs(vg_id,vgroup_id_out,path,options)<0)
                        goto out;
                    if (copy_vg_an(infile_id,outfile_id,vg_id,vgroup_id_out,path,options)<0)
                        goto out;
                    
                }
                
                else
                    
                {
                    /* open previously visited group */
                    vgroup_id_out = Vattach (outfile_id, ref, "r");


                }
                    
                
                /* insert the created (or opened) vgroup into its parent */
                if (Vinsert (vgroup_id_out_par, vgroup_id_out)==FAIL)
                {
                    printf("Could not insert group <%s>\n", vg_name);
                    goto out;
                }
                    
            } /* create the group in output or create the link */
            
            
            
             
           /*-------------------------------------------------------------------------
            * if group not visited, add to table and check for more tag/ref pairs
            *-------------------------------------------------------------------------
            */
            
                     
            /* check if already visited */
            if ( visited < 0  ) 
            {
                
                /* initialize path */
                path=get_path(path_name,vg_name);
                
                /* add object to table */
                list_table_add(list_tbl,tag,ref,path);
                
                if (options->verbose)
                    printf(PFORMAT,"","","",path);    
                
                if ( options->trip==0 ) 
                {
                    /*we must go to other groups always */
                }
                
                
                /* insert objects for this group */
                ntagrefs  = Vntagrefs(vg_id);
                if ( ntagrefs > 0 )
                {
                    tags = (int32 *) malloc(sizeof(int32) * ntagrefs);
                    refs = (int32 *) malloc(sizeof(int32) * ntagrefs);
                    if (Vgettagrefs(vg_id, tags, refs, ntagrefs)<0)
                        goto out;
                    /* recurse */
                    if (vgroup_insert(
                        infile_id,
                        outfile_id,
                        sd_id,
                        sd_out,
                        gr_id,
                        gr_out,
                        vgroup_id_out,
                        path,
                        tags,
                        refs,
                        ntagrefs,
                        list_tbl,
                        td1,
                        td2,
                        options)<0) {
                        goto out;
                    }
                    free (tags);
                    tags=NULL;
                    free (refs);
                    refs=NULL;
                } /* ntagrefs > 0 */
                
                
                if (path)
                    free(path);
                
            } /* check if already visited */
            
            
            if(Vdetach (vg_id)==FAIL)
            {
                printf("Error: Could not detach group <%s>\n", vg_name);
                goto out;
            }
            if (options->trip==1)
            {
                if (Vdetach (vgroup_id_out)==FAIL)
                {
                    printf("Error: Could not detach group <%s>\n", vg_name);
                    goto out;
                }
            }
            
            break;
            
            
  /*-------------------------------------------------------------------------
   * SDS
   *-------------------------------------------------------------------------
   */   
            
  case DFTAG_SD:  /* Scientific Data */
  case DFTAG_SDG: /* Scientific Data Group */
  case DFTAG_NDG: /* Numeric Data Group */
      /* copy dataset */
      if (copy_sds(sd_id,
          sd_out,
          tag,ref,
          vgroup_id_out_par,
          path_name,
          options,
          list_tbl,
          td1,
          td2,
          infile_id,
          outfile_id)<0)
          return FAIL;
      
      break;
      
  /*-------------------------------------------------------------------------
   * Image
   *-------------------------------------------------------------------------
   */   
      
  case DFTAG_RI:   /* Raster Image */
  case DFTAG_CI:   /* Compressed Image */
  case DFTAG_RIG:  /* Raster Image Group */
  case DFTAG_RI8:  /* Raster-8 image */
  case DFTAG_CI8:  /* RLE compressed 8-bit image */
  case DFTAG_II8:  /* IMCOMP compressed 8-bit image */
      /* copy GR  */
      if (copy_gr(infile_id,
          outfile_id,
          gr_id,
          gr_out,
          tag,
          ref,
          vgroup_id_out_par,
          path_name,
          options,
          list_tbl)<0)
          return FAIL;
      break;
      
 /*-------------------------------------------------------------------------
  * Vdata
  *-------------------------------------------------------------------------
  */   
      
  case DFTAG_VH:  /* Vdata Header */
      if (copy_vs(infile_id,
          outfile_id,
          tag,
          ref,
          vgroup_id_out_par,
          path_name,
          options,
          list_tbl,
          0)<0)
          return FAIL;
      break;
  } /* switch */
  
 } /* i */
 
 return SUCCEED;
 
out:
 
 if (tags!=NULL)
     free (tags);
 if (refs!=NULL)
     free (refs);
 
 return FAIL;
}