Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
mri_free.c
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 #include "mrilib.h"
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 void *mri_data_pointer( MRI_IMAGE *im )
00016 {
00017    void *data ;
00018 
00019 #ifdef USE_MRI_DELAY
00020    if( im->fname != NULL && (im->fondisk & INPUT_DELAY) )
00021       mri_input_delay( im ) ;
00022 #endif
00023 
00024    if( im == NULL ) return NULL ;  
00025 
00026    switch( im->kind ){
00027       case MRI_byte:   data = im->im.byte_data   ; break ;
00028       case MRI_short:  data = im->im.short_data  ; break ;
00029       case MRI_int:    data = im->im.int_data    ; break ;
00030       case MRI_float:  data = im->im.float_data  ; break ;
00031       case MRI_double: data = im->im.double_data ; break ;
00032       case MRI_complex:data = im->im.complex_data; break ;
00033       case MRI_rgb:    data = im->im.rgb_data    ; break ;
00034       case MRI_rgba:   data = im->im.rgba_data   ; break ;
00035       default:         data = NULL               ; break ;
00036    }
00037    return data ;
00038 }
00039 
00040 
00041 
00042 
00043 
00044 void mri_fix_data_pointer( void *ptr , MRI_IMAGE *im )
00045 {
00046    if( im == NULL ) return ;
00047    switch( im->kind ){
00048       case MRI_byte:   im->im.byte_data   = (byte *)    ptr; break ;
00049       case MRI_short:  im->im.short_data  = (short *)   ptr; break ;
00050       case MRI_int:    im->im.int_data    = (int   *)   ptr; break ;
00051       case MRI_float:  im->im.float_data  = (float *)   ptr; break ;
00052       case MRI_double: im->im.double_data = (double *)  ptr; break ;
00053       case MRI_complex:im->im.complex_data= (complex *) ptr; break ;
00054       case MRI_rgb:    im->im.byte_data   = (byte *)    ptr; break ;
00055       case MRI_rgba:   im->im.rgba_data   = (rgba *)    ptr; break ;
00056    }
00057    return ;
00058 }
00059 
00060 
00061 
00062 
00063 
00064 void mri_free( MRI_IMAGE *im )
00065 {
00066    void *ptr ;
00067 
00068 ENTRY("mri_free") ;
00069    if( im == NULL ) EXRETURN ;
00070 #ifdef USE_MRI_DELAY
00071    if( im->fname != NULL ){ free(im->fname) ; im->fname = NULL ; }
00072    im->fondisk = 0 ;
00073 #endif
00074    if( im->name != NULL ){ free(im->name) ; im->name = NULL ; }
00075    ptr = mri_data_pointer(im) ;
00076    if( ptr != NULL ) free(ptr) ;
00077    free(im) ;
00078    EXRETURN ;
00079 }
00080 
00081 
00082 
00083 
00084 
00085 int mri_datum_size( MRI_TYPE typ )
00086 {
00087    switch( typ ){
00088       case MRI_byte:    return sizeof(byte) ;
00089       case MRI_short:   return sizeof(short) ;
00090       case MRI_int:     return sizeof(int) ;
00091       case MRI_float:   return sizeof(float) ;
00092       case MRI_double:  return sizeof(double) ;
00093       case MRI_complex: return sizeof(complex) ;
00094       case MRI_rgb:     return 3*sizeof(byte) ;
00095       case MRI_rgba:    return sizeof(rgba) ;
00096       default:          return 0 ;
00097    }
00098 }
00099 
00100 
00101 
00102 
00103 
00104 
00105 
00106 void mri_move_guts( MRI_IMAGE *qim , MRI_IMAGE *zim )
00107 {
00108    void *ptr ;
00109 
00110 ENTRY("mri_move_guts") ;
00111 
00112    if( qim == NULL || zim == NULL ) EXRETURN ;  
00113 
00114    
00115 
00116 #ifdef USE_MRI_DELAY
00117    if( qim->fname != NULL ) free(qim->fname) ;
00118 #endif
00119    if( qim->name != NULL ) free(qim->name) ;
00120    ptr = mri_data_pointer(qim) ;
00121    if( ptr != NULL ) free(ptr) ;
00122 
00123    
00124 
00125    *qim = *zim ;
00126 
00127    
00128 
00129    mri_fix_data_pointer( NULL , zim ) ;
00130    zim->name = NULL ;
00131 #ifdef USE_MRI_DELAY
00132    zim->fname = NULL ;
00133 #endif
00134    free(zim) ; EXRETURN ;
00135 }
00136 
00137 
00138 
00139 #ifdef NO_RINT
00140 double rint( double x )
00141 {
00142    int nn ;
00143 
00144    if( x >= 0.0 ) nn = (int)(x+0.49999999) ;
00145    else           nn = (int)(x-0.49999999) ;
00146    return (double)nn ;
00147 }
00148 #endif