Code Comments

Programming Forum and web based access to our favorite programming groups.
For Programmers: Free Programming Magazines | New: Database administration forum
Registration is free! Edit your profileCalendarFind other membersFrequently Asked QuestionsSearch -> 
Post New Thread











Thread
Author

Red-Black-Trees and Fortran 2003 Features
Hi,

is there any Fortran 2003 standard conforming way of acquiring  the
address of pointer allocated objects, other than the well-known %loc()
of loc() extensions?

I have a fortran code implementing a red-black-tree-structure which
(until now) uses this extension in order to compare addresses. But my
compiler complains about the F2003 extension. And I am a little bit
pedantic about it...

I know about the c_loc() function from the intrinsic module
iso_c_binding, but this seems to work only with the interoperable typs
(c_int, c_double, ...) from the module and not with self-made
datatypes like this:

type :: rb_node
integer :: color
type(rb_node),pointer :: left,right,parent
real(dp) :: value
end type rb_node

Any ideas?

Cheers,
thorium90


Report this thread to moderator Post Follow-up to this message
Old Post
pelotudo@gmx.de
08-21-07 12:10 AM


Re: Red-Black-Trees and Fortran 2003 Features
On Aug 20, 12:41 pm, pelot...@gmx.de wrote:

> is there any Fortran 2003 standard conforming way of acquiring  the
> address of pointer allocated objects, other than the well-known %loc()
> of loc() extensions?

Sort of.  The function C_LOC, provided by intrinsic module
ISO_C_BINDING, returns a "C pointer" to its argument, suitable for
passing to a C routine.  The catch is that it comes to you in a value
of type C_PTR which has a private component containing the address.
The intent is for you to declare the interface to C routines as taking
a C_PTR argument.

You can get around this with our old friend TRANSFER.  For example:

use iso_c_binding
real, allocatable :: a(:)
integer(C_SIZE_T) address

allocate (a(10))
address = transfer (c_loc(a), address)
print *, address
end

This at least uses all standard syntax.

Steve


Report this thread to moderator Post Follow-up to this message
Old Post
Steve Lionel
08-21-07 12:10 AM


Re: Red-Black-Trees and Fortran 2003 Features
On 2007-08-20 13:41:42 -0300, pelotudo@gmx.de said:

> Hi,
>
> is there any Fortran 2003 standard conforming way of acquiring  the
> address of pointer allocated objects, other than the well-known %loc()
> of loc() extensions?
>
> I have a fortran code implementing a red-black-tree-structure which
> (until now) uses this extension in order to compare addresses. But my
> compiler complains about the F2003 extension. And I am a little bit
> pedantic about it...

If you want to know if two pointers point at the same thing then
there is an intrinsic called ASSOCIATED. It has two forms. With
one argument it finds "null" or not (read the actual fine print).
With two arguments it deternines if they point at the same thing
(there is much fine print over zero sized arrays as per a recent
lengthy thread). All this assumes that you do not literally want
to do what you said but what you meant to have said and we have
to guess a bit about that.

> I know about the c_loc() function from the intrinsic module
> iso_c_binding, but this seems to work only with the interoperable typs
> (c_int, c_double, ...) from the module and not with self-made
> datatypes like this:
>
>   type :: rb_node
>      integer :: color
>      type(rb_node),pointer :: left,right,parent
>      real(dp) :: value
>   end type rb_node
>
> Any ideas?
>
> Cheers,
> thorium90



Report this thread to moderator Post Follow-up to this message
Old Post
Gordon Sande
08-21-07 12:10 AM


Re: Red-Black-Trees and Fortran 2003 Features
On Mon, 20 Aug 2007 09:41:42 -0700, pelotudo@gmx.de wrote
(in article <1187628102.336668.221520@57g2000hsv.googlegroups.com> ):

> is there any Fortran 2003 standard conforming way of acquiring  the
> address of pointer allocated objects, other than the well-known %loc()
> of loc() extensions?

Not other than C_LOC, which has restrictions, as you note. It isn't entirely
restricted to interoperable types. I seem to recall that you can do a few
other things. See its doc for details.

Anyway, if you managed to get the addresses, there wouldn't be much useful
you could do with them. Other than passing addresses to C, the things you
could do with addresses fall in the category of being either nonstandard or
already provided by standard features.

> I have a fortran code implementing a red-black-tree-structure which
> (until now) uses this extension in order to compare addresses. But my
> compiler complains about the F2003 extension. And I am a little bit
> pedantic about it...

If you are really pedantic, then you won't use the nonstandard concept of
comparing addresses, no matter how you manage to get them. While that will
usually work in practice, the standard is (intentionally) silent on the
matter. The compiler is theoretically allowed to do some pretty "strange"
things, as long as it gets all the bookkeeping right in the end. (For
example, it  could keep a temporary copy at a different address, with enough
"glue" to make things work; this could conceivably even make sense in some
multi-processor scenarios).

As Gordon mentioned, it sounds like you are just trying to write your own
version of the two-argument form of the associated intrinsic. I'd suggest
just using associated. The zero-sized cases where associated is "tricky" are
also cases where the concept of comparing addresses won't generally work
either.

--
Richard Maine                    | Good judgement comes from experience;
email: last name at domain . net | experience comes from bad judgement.
domain: summertriangle           |  -- Mark Twain


 ________________________________________
________

Hogwasher, Premier News and Mail for OS X
http://www.asar.com/cgi-bin/product.../hogwasher.html
 ________________________________________
________


Report this thread to moderator Post Follow-up to this message
Old Post
Richard Maine
08-21-07 12:10 AM


Re: Red-Black-Trees and Fortran 2003 Features
> use iso_c_binding
> real, allocatable :: a(:)
> integer(C_SIZE_T) address
>
> allocate (a(10))
> address = transfer (c_loc(a), address)
> print *, address
> end
>
> This at least uses all standard syntax.

Yep, but still, from my understanding of F2003, it is not guaranteed to
do what you expect. For one thing, size_t might not be large enough to
store a pointer (or too large, but that's less likely).

--
FX

Report this thread to moderator Post Follow-up to this message
Old Post
FX
08-21-07 01:06 PM


Re: Red-Black-Trees and Fortran 2003 Features
On Aug 21, 7:02 am, "FX" <coud...@alussinan.org> wrote:

> Yep, but still, from my understanding of F2003, it is not guaranteed to
> do what you expect. For one thing, size_t might not be large enough to
> store a pointer (or too large, but that's less likely).

Perhaps I'm not familiar enough with C to recognize when that might be
the case.  Maybe C_INTPTR_T would be a better choice?

I do agree with others that ASSOCIATED seems better suited to the
purpose stated in the original post.

Steve


Report this thread to moderator Post Follow-up to this message
Old Post
Steve Lionel
08-22-07 12:08 AM


Re: Red-Black-Trees and Fortran 2003 Features
> Perhaps I'm not familiar enough with C to recognize when that might be
> the case.  Maybe C_INTPTR_T would be a better choice?

Yep, intptr_t is designed for that purpose. The code you suggest (with
C_INTPTR_T instead of C_SIZE_T) probably isn't guaranteed to work, but it
most probably would work on all compilers.

--
FX

Report this thread to moderator Post Follow-up to this message
Old Post
FX
08-22-07 12:08 AM


Sponsored Links




Last Thread Next Thread Next
Search this forum -> 
Post New Thread

Fortran archive

Show a Printable Version Send to friend Email This Page to Someone! subscribe to this thread Receive updates to this thread
Computer Consultants
Programming Jobs
Visual Basic Controls
SQL Server Programming
Webservices
Java Security
Visual Studio
C# Programming
Visual J++
Software engineering
Open source Software
Perl Programming
PHP Programming
ASP Programming
ASP .NET Programming
Visual Basic Programming
Windows Scripting Host
Java Programming
Java Help
Java Beans
VBScript
Cobol
MAC Applications
Unix Programming
Forum Jump:
All times are GMT. The time now is 03:24 PM.

 
Free MCSE Braindumps | Real Estate Topics

Programming forum archive

Copyrights CodeComments.com 2004 - 2006

Powered by vBulletin Copyright 2000-2006 Jelsoft Enterprises Limited.