[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Structure field concatenation
Hi folks,
I want to thank all of you for your help on this topic. After
trying the suggestions, I was successful at performing a flexible
concatenation of an array of structures with elements that are
pointers. I append the following small program that demonstrates
how to do this, in case anyone else is interested.
Thanks again!
Amara
;==========cut here========================================
;Program testpointer.pro
;PURPOSE: This IDL program is an example of an array of anonymous
;structures of fields including a pointer field. Here we don't know how
;many structures we want in our array of structures, nor do we know the
;data definition of of our pointer. This program is one way to create an
;array of structures on the fly, with data that is not defined
beforehand.
;Note: tested on IDL Version 5.3 (sunos sparc)
;-------------------------------------------------------------
;Amara Graps 9 Septempber 2000
;-------------------------------------------------------------
;STEP 1
;Create an anonymous structure
thisstruc = {orbit:'',freq:PTR_NEW()}
;Create a 1-element array of anonymous structure (we will concatenate
it,
;to make a longer array, when we need it).
periodcube = REPLICATE(thisstruc,1)
;Assign the structure values: Gal orbit G2, index array of length 100
periodcube[0].orbit = 'G2'
CASE 1 OF
PTR_VALID(periodcube[0].freq):
*periodcube[0].freq=DINDGEN(100)
ELSE: BEGIN
;Make it a valid pointer and fill it
periodcube[0].freq = PTR_NEW(DINDGEN(100))
END
ENDCASE
;set a variable to the pointer, if we want to play with it
test1 = *periodcube[0].freq
;Take a look
help, test1
;STEP 2
;Update the structure by creating a temporary structure like the
;original, and then concantenating
tempperiod = thisstruc
;Assign the structure values, Gal orbit C3, index array of length 50
tempperiod.orbit = 'C3'
CASE 1 OF
PTR_VALID(tempperiod.freq): *tempperiod.freq=DINDGEN(50)+50
ELSE: BEGIN
;Make it a valid pointer and fill it
tempperiod.freq = PTR_NEW(DINDGEN(50)+50)
END
ENDCASE
;Set a variable to the pointer, if we want to play with it
test2 = *tempperiod.freq
;Take a look
help, test2
;Concatenating
new = [periodcube,tempperiod]
;Set variables to the pointers in the structure
;in order to perform more manipulation
freq1 = *new[0].freq
freq2 = *new[1].freq
;Take a look (These are OK)
help, freq1, freq2
help, *new[0].freq,*new[1].freq
help, new[0].orbit, new[1].orbit
;To concantenate indefinitely, rename and repeat STEP 2
periodcube = new
STOP, 'look at structure periodcube'
END ;of program testpointer.pro
--
***************************************************************
Amara Graps | Max-Planck-Institut fuer Kernphysik
Interplanetary Dust Group | Saupfercheckweg 1
+49-6221-516-543 | 69117 Heidelberg, GERMANY
* http://galileo.mpi-hd.mpg.de/~graps
***************************************************************
"Never fight an inanimate object." - P. J. O'Rourke