comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: How to traverse/inquire a class object structure in IDL?
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: How to traverse/inquire a class object structure in IDL? [message #17393 is a reply to message #17387] Wed, 13 October 1999 00:00 Go to previous message
davidf is currently offline  davidf
Messages: 2866
Registered: September 1996
Senior Member
Paul van Delst (paul.vandelst@ssec.wisc.edu) writes:

> Last night I entered into the world of IDL objects. I was amazed at how much
> easier it is to keep control of a data object rather than using a regular
> structure.

Hooray!

> Anyway, since I have been programming IDL in an Object Oriented mode for about 8
> hours, I have some questions that I hope someone out there can help me with. The
> documentation (on-line and printed) was not useful.

No, probably not. :-(

> I have a class structure definition in nasti__define.pro:.
> [Much deleted.]

> This all works fine. I have an simple inquire method:
>
> PRO nasti::inquire_nasti
>
> PRINT, FORMAT = '( /5x, "Inquiring..." )'
> PRINT, PTR_VALID(), OBJ_VALID()
>
> END
>
> which when I run it, gives:
>
> IDL> n->inquire_nasti
> Inquiring...
> <PtrHeapVar2>
> <ObjHeapVar1(NASTI)>
>
> where the PtrHeapVar2 is the pointer to "self.wavenumber" and the object
> reference is for the object. Cool.

Cool if you have one object. Not so cool if you have several
other programs with objects running, probably. :-)

I think I would have written it something like this:

PRO nasti::inquire
Print, 'Wave Number: ', *self.wavenumber
Help, *.self.radiance, Output=thisOutput
Print, 'Radiance Represented As: ', thisOutput
END

> Not good. As more objects are created and destroyed, the valid pointer list
> grows. I would like to do the following in a CLEANUP method:
>
> FOR i = 0, n_object_structure_elements - 1 DO $
> IF ( PTR_VALID( self.(i) ) ) THEN $
> PTR_FREE, self.(i)
>
> that is, *explicitly* free up the pointers. This works great if I have a value
> for n_object_structure_elements.
>
> QUESTIONS:
>
> 1) Is my technique valid? That is, I want to do the following:
> - create a data object
> - read some amount of data into that object
> - do stuff with the data object
> - delete the data object INCLUDING any pointers in the object.
> I don't know how much data I have ahead of time so I used pointers. Can I create
> data objects on the fly, based on how much data is in a datafile or requested
> from a datafile?
>
> 2a) If my technique is o.k., how do I free up the pointers in my object before I
> destroy it?

Your technique is probably OK, but it seems a bit
convoluted to me. Why not just write the CLEANUP routine
like this:

PRO nasti::cleanup
Ptr_Free, self.wavenumber
Ptr_Free, self.radiance
...
Ptr_Free, self.decimal_time
END

A few extra keystrokes, perhaps, but it has the advantage
that you can see at a glance what it does. :-)

> ..OR..
>
> 2b) Is the above code stub a valid/smart way to free up the pointers in a data
> object and, if so, how do I determine the value of n_object_structure_elements?
> (You can't use N_TAGS() on an object but you can use the self.(i) type of
> structure reference so I'm confused.)

If you really like your solution, you could find
the number of fields in your object like this:

thisClass = Obj_Class(self)
ok = Execute("struct = {" + thisClass + "}")
object_structure_elements = N_Elements(Tag_Names(struct))

But this just seems way too clever for me. :-)

Cheers,

David
--
David Fanning, Ph.D.
Fanning Software Consulting
Phone: 970-221-0438 E-Mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Toll-Free IDL Book Orders: 1-888-461-0155
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: polyfill on a map
Next Topic: IDL and KDE

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 16:26:33 PDT 2025

Total time taken to generate the page: 0.24087 seconds