changeset 1011:2fc28a9cdda7

*** empty log message ***
author david <david>
date Wed, 21 Aug 1996 13:20:03 +0000
parents 7945e99238cd
children 66c46ba73f2d
files volume_io/Volumes/get_hyperslab.c
diffstat 1 files changed, 70 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/volume_io/Volumes/get_hyperslab.c
+++ b/volume_io/Volumes/get_hyperslab.c
@@ -15,7 +15,7 @@
 #include  <internal_volume_io.h>
 
 #ifndef lint
-static char rcsid[] = "$Header: /private-cvsroot/minc/volume_io/Volumes/get_hyperslab.c,v 1.2 1996-05-17 19:36:25 david Exp $";
+static char rcsid[] = "$Header: /private-cvsroot/minc/volume_io/Volumes/get_hyperslab.c,v 1.3 1996-08-21 13:20:03 david Exp $";
 #endif
 
 public  void  convert_voxels_to_values(
@@ -198,6 +198,41 @@
     }
 }
 
+private  Real  *unsigned_byte_to_real = NULL;
+private  Real  *signed_byte_to_real = NULL;
+private  Real  *unsigned_short_to_real = NULL;
+private  Real  *signed_short_to_real = NULL;
+
+private  void  check_real_conversion_lookup(
+    Data_types  data_type )
+{
+    Real   min_value, max_value, **ptr;
+    long   i, long_min, long_max;
+
+    switch( data_type )
+    {
+    case  UNSIGNED_BYTE:   ptr = &unsigned_byte_to_real;  break;
+    case  SIGNED_BYTE:     ptr = &signed_byte_to_real;  break;
+    case  UNSIGNED_SHORT:  ptr = &unsigned_short_to_real;  break;
+    case  SIGNED_SHORT:    ptr = &signed_short_to_real;  break;
+    default:               return;
+    }
+
+    if( *ptr != NULL )
+        return;
+
+    get_type_range( data_type, &min_value, &max_value );
+    long_min = (long) min_value;
+    long_max = (long) max_value;
+
+    ALLOC( *ptr, long_max - long_min + 1 );
+
+    (*ptr) -= long_min;
+
+    for_inclusive( i, long_min, long_max )
+        (*ptr)[i] = (Real) i;
+}
+
 public  void  get_voxel_values_5d(
     Data_types  data_type,
     void        *void_ptr,
@@ -232,6 +267,8 @@
     step2 -= n3 * step3;
     step3 -= n4 * step4;
 
+    check_real_conversion_lookup( data_type );
+
     switch( data_type )
     {
     case UNSIGNED_BYTE:
@@ -246,7 +283,8 @@
                     {
                         for_less( i4, 0, n4 )
                         {
-                            *values = (Real) *unsigned_byte_ptr;
+                            *values = unsigned_byte_to_real[
+                                                (long) *unsigned_byte_ptr];
                             ++values;
                             unsigned_byte_ptr += step4;
                         }
@@ -272,7 +310,8 @@
                     {
                         for_less( i4, 0, n4 )
                         {
-                            *values = (Real) *signed_byte_ptr;
+                            *values = signed_byte_to_real[
+                                                (long) *signed_byte_ptr];
                             ++values;
                             signed_byte_ptr += step4;
                         }
@@ -298,7 +337,8 @@
                     {
                         for_less( i4, 0, n4 )
                         {
-                            *values = (Real) *unsigned_short_ptr;
+                            *values = unsigned_short_to_real[
+                                               (long) *unsigned_short_ptr];
                             ++values;
                             unsigned_short_ptr += step4;
                         }
@@ -324,7 +364,8 @@
                     {
                         for_less( i4, 0, n4 )
                         {
-                            *values = (Real) *signed_short_ptr;
+                            *values = signed_short_to_real[
+                                                (long) *signed_short_ptr];
                             ++values;
                             signed_short_ptr += step4;
                         }
@@ -474,6 +515,7 @@
     step0 -= n1 * step1;
     step1 -= n2 * step2;
     step2 -= n3 * step3;
+    check_real_conversion_lookup( data_type );
 
     switch( data_type )
     {
@@ -487,7 +529,8 @@
                 {
                     for_less( i3, 0, n3 )
                     {
-                        *values = (Real) *unsigned_byte_ptr;
+                        *values = unsigned_byte_to_real[
+                                                (long) *unsigned_byte_ptr];
                         ++values;
                         unsigned_byte_ptr += step3;
                     }
@@ -509,7 +552,7 @@
                 {
                     for_less( i3, 0, n3 )
                     {
-                        *values = (Real) *signed_byte_ptr;
+                        *values = signed_byte_to_real[(long) *signed_byte_ptr];
                         ++values;
                         signed_byte_ptr += step3;
                     }
@@ -531,7 +574,8 @@
                 {
                     for_less( i3, 0, n3 )
                     {
-                        *values = (Real) *unsigned_short_ptr;
+                        *values = unsigned_short_to_real[
+                                                (long) *unsigned_short_ptr];
                         ++values;
                         unsigned_short_ptr += step3;
                     }
@@ -553,7 +597,8 @@
                 {
                     for_less( i3, 0, n3 )
                     {
-                        *values = (Real) *signed_short_ptr;
+                        *values = signed_short_to_real[
+                                                (long) *signed_short_ptr];
                         ++values;
                         signed_short_ptr += step3;
                     }
@@ -682,6 +727,7 @@
     step2 = steps[2];
     step0 -= n1 * step1;
     step1 -= n2 * step2;
+    check_real_conversion_lookup( data_type );
 
     switch( data_type )
     {
@@ -693,7 +739,7 @@
             {
                 for_less( i2, 0, n2 )
                 {
-                    *values = (Real) *unsigned_byte_ptr;
+                    *values = unsigned_byte_to_real[(long) *unsigned_byte_ptr];
                     ++values;
                     unsigned_byte_ptr += step2;
                 }
@@ -711,7 +757,7 @@
             {
                 for_less( i2, 0, n2 )
                 {
-                    *values = (Real) *signed_byte_ptr;
+                    *values = signed_byte_to_real[(long) *signed_byte_ptr];
                     ++values;
                     signed_byte_ptr += step2;
                 }
@@ -729,7 +775,7 @@
             {
                 for_less( i2, 0, n2 )
                 {
-                    *values = (Real) *unsigned_short_ptr;
+                    *values = unsigned_short_to_real[(long) *unsigned_short_ptr];
                     ++values;
                     unsigned_short_ptr += step2;
                 }
@@ -747,7 +793,7 @@
             {
                 for_less( i2, 0, n2 )
                 {
-                    *values = (Real) *signed_short_ptr;
+                    *values = signed_short_to_real[(long) *signed_short_ptr];
                     ++values;
                     signed_short_ptr += step2;
                 }
@@ -855,6 +901,7 @@
     step0 = steps[0];
     step1 = steps[1];
     step0 -= n1 * step1;
+    check_real_conversion_lookup( data_type );
 
     switch( data_type )
     {
@@ -864,7 +911,7 @@
         {
             for_less( i1, 0, n1 )
             {
-                *values = (Real) *unsigned_byte_ptr;
+                *values = unsigned_byte_to_real[(long) *unsigned_byte_ptr];
                 ++values;
                 unsigned_byte_ptr += step1;
             }
@@ -878,7 +925,7 @@
         {
             for_less( i1, 0, n1 )
             {
-                *values = (Real) *signed_byte_ptr;
+                *values = signed_byte_to_real[(long) *signed_byte_ptr];
                 ++values;
                 signed_byte_ptr += step1;
             }
@@ -892,7 +939,7 @@
         {
             for_less( i1, 0, n1 )
             {
-                *values = (Real) *unsigned_short_ptr;
+                *values = unsigned_short_to_real[(long) *unsigned_short_ptr];
                 ++values;
                 unsigned_short_ptr += step1;
             }
@@ -906,7 +953,7 @@
         {
             for_less( i1, 0, n1 )
             {
-                *values = (Real) *signed_short_ptr;
+                *values = signed_short_to_real[(long) *signed_short_ptr];
                 ++values;
                 signed_short_ptr += step1;
             }
@@ -989,13 +1036,15 @@
     float            *float_ptr;
     double           *double_ptr;
 
+    check_real_conversion_lookup( data_type );
+
     switch( data_type )
     {
     case UNSIGNED_BYTE:
         unsigned_byte_ptr = void_ptr;
         for_less( i0, 0, n0 )
         {
-            *values = (Real) *unsigned_byte_ptr;
+            *values = unsigned_byte_to_real[(long) *unsigned_byte_ptr];
             ++values;
             unsigned_byte_ptr += step0;
         }
@@ -1005,7 +1054,7 @@
         signed_byte_ptr = void_ptr;
         for_less( i0, 0, n0 )
         {
-            *values = (Real) *signed_byte_ptr;
+            *values = signed_byte_to_real[(long) *signed_byte_ptr];
             ++values;
             signed_byte_ptr += step0;
         }
@@ -1015,7 +1064,7 @@
         unsigned_short_ptr = void_ptr;
         for_less( i0, 0, n0 )
         {
-            *values = (Real) *unsigned_short_ptr;
+            *values = unsigned_short_to_real[(long) *unsigned_short_ptr];
             ++values;
             unsigned_short_ptr += step0;
         }
@@ -1025,7 +1074,7 @@
         signed_short_ptr = void_ptr;
         for_less( i0, 0, n0 )
         {
-            *values = (Real) *signed_short_ptr;
+            *values = signed_short_to_real[(long) *signed_short_ptr];
             ++values;
             signed_short_ptr += step0;
         }