Re: Creating an IDL array within C? [message #62305 is a reply to message #62225] |
Mon, 01 September 2008 20:21  |
Karl[1]
Messages: 79 Registered: October 2005
|
Member |
|
|
On Aug 30, 10:52 am, MC <Morefl...@gmail.com> wrote:
> On Aug 30, 1:40 am, "hotplainr...@gmail.com" <hotplainr...@gmail.com>
> wrote:
>
>
>
>> Hi guys,
>
>> Another problem for everyone. Yay!
>
>> Firstly, I'm working on translating code from IDL to C for CUDA
>> purposes by re-writing it as a system routine.
>
>> so the issue:
>
>> Within IDL, the user can do this
>
>> IDL> help, data6
>> DATA6 UNDEFINED = <Undefined>
>
>> and call an arbitrary function that will have it created.
>
>> thisfunc, data6, wv
>
>> Within thisfunc.pro
>> pro thisfunc, data6, wv
>> data6 = fltarr(5,6)
>
>> How do I do this in C?
>> Is it even possible or do I have to ensure that data6 exists before I
>> call my system routine?
>
>> Regards
>> Zaki
>
> When you create the function prototype you declare the variable, even
> if it has no value at that time.
> In your case 'data6' could be a pointer variable for an as yet unsized
> or variable sized array
> -at least that's how I remember ANSI C should work e.g.
>
> <myheader.h>
>
> int thisfunc(float *data6, int wv ....);
>
> Cheers
No, that's not even close. The OP is asking how to create an IDL
array in a C routine.
It is a lot easier to allocate the array in IDL and pass it to the C
function if you can. But sometimes you don't know the size of the
array until after you are actually in the C code.
Here is the general idea:
Suppose you want to return an IDL variable containing an array [5,6]
of floats. (The dimensions COULD be determined at run time.)
The variable is to be passed to the caller in argv[0].
IDL_MEMINT dim[2];
IDL_VPTR vpVar;
dim[0] = 5;
dim[1] = 6;
float *fp;
fp = (float*) IDL_MakeTempArray(IDL_TYP_FLOAT, 2, dim,
IDL_ARR_INI_NOP, &vpVar);
/* code to fill in array pointed to by fp */
if (argc >= 1)
IDL_VarCopy(vpVar, argv[0]);
See the IDL External Programming Guide for more info.
|
|
|