STEINBERGER@KL.SRI.COM (Richard Steinberger) (05/26/87)
Several people responded to my query about using Fortran (or another HLL)
to make a runtime decision on who to appropriatly use an array of a specified
data type. Specifically I wanted to have a subroutine receive an array and
its data type. The subroutine would then correctly write the array data to
a file (or otherwise use it). I didn't want to copy the array data to a
local array, use common statements, and, as some people found out,
equivalencing a passed array to local arrays doesn't work. The pseudo-code
below represents what I consider the best Fortran approach, although it was
pointed out that C allows run-time casting of data types.
Call sub1(array,array_type) !Main or calling program
integer, real or whatever array(size) !original storage allocation
.
.
end
subroutine sub1(array,array_type) !"intermediate subroutine"
integer array(*) !any type is OK here
call sub2(array,array,array,array,...,array_type)
return
end
subroutine sub2(b_array,i2_array,i4_array,r4_array,....,array_type)
byte b_array(*)
integer*2 i2_array(*)
integer*4 i4_array(*)
.
.
if(array_type .eq. 'byte')then
use b_array
elseif (array_type .eq. 'i2')then
use i2_array
.
.
.
endif
return
end
Note that no copying was necessary, only arrays (and not structures) were
necessary, and only one intermediate routine was necessary.
Thanks to everyone for their suggestions.
-Ric Steinberger
steinberger@kl.sri.com
-------