comp.lang.ada
 help / color / mirror / Atom feed
From: tmoran@acm.org
Subject: Re: C array to Ada pointer to unconstrained array without copying memory
Date: Tue, 07 Oct 2003 18:30:56 GMT
Date: 2003-10-07T18:30:56+00:00	[thread overview]
Message-ID: <ADDgb.237922$mp.149596@rwcrnsc51.ops.asp.att.net> (raw)
In-Reply-To: mailman.37.1065537708.25614.comp.lang.ada@ada-france.org

>subtype Array2 is Ada_Array (1 .. Length);
>
>X : Array2;
>for X'Address use Ptr; -- ok, Ptr should be of type System'Address, but hey!
>
>And then you can make use of X.  However being defined on the stack, it
>can be quite awkward to use.
   I don't understand.  Nothing is defined on, or off, the stack here.
You are saying that X is at location 12345 (or whatever) in RAM.
Whether X happens to be in the same area as the stack depends on
whether (System.Address_to_Access_Conversions .To_Address of) Ptr
happens to point into the stack or not.

>It would be nice to have the same thing but with X dynamically allocated.
  If Ptr points into your program's heap memory, that's where X will be.
Or do you mean C is allocating memory, and setting its memory allocation
structures, and you want an Ada Access type, and Ada's memory allocation
structures, to be set as if that memory was allocated by an Ada "new"?

>The problem is the bounds of course.
  If a call to C gave you an address and a length, then those, not a
constrained array, are what you have to work with.  Just as in C,
you'll have to write things like
  if Index in 1 .. Length then
    Y := X(Index);
  else
    raise Constraint_Error;
  end if;

>For example, GNAT usually uses
>fat pointers, consisting of two normal pointers where one points to the
>data, and the other to the bounds.  So the "clever stuff" will need to
>allocate some memory to hold the bounds and set up the fat pointer
>appropriately.
  So you're talking about using embedded assembly language to fake out the
compiler?  If it's the only way to get to the moon, someone will have to
put themselves on top of an enormous can of explosives and light the
outlets.  Most real problems, however, can be solved in less dangerous
ways.  What's the real problem you are trying to solve here?



  reply	other threads:[~2003-10-07 18:30 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-07 14:43 C array to Ada pointer to unconstrained array without copying memory Duncan Sands
2003-10-07 18:30 ` tmoran [this message]
2003-10-07 19:24   ` Duncan Sands
2003-10-08  0:02   ` sk
     [not found]   ` <3F83540E.5000302@myob.com>
2003-10-08  9:18     ` Duncan Sands
2003-10-07 20:00 ` Jeffrey Carter
2003-10-07 20:39   ` Duncan Sands
2003-10-08  1:27     ` Jeffrey Carter
2003-10-07 20:53 ` Chad R. Meiners
2003-10-07 21:24   ` Duncan Sands
2003-10-07 22:44     ` C array to Ada pointer to unconstrained array without copyingmemory Chad R. Meiners
2003-10-07 22:52       ` Chad R. Meiners
2003-10-08  9:20         ` Duncan Sands
2003-10-08 16:16           ` C array to Ada pointer to unconstrained array withoutcopyingmemory Chad R. Meiners
2003-10-08 16:49             ` Duncan Sands
2003-10-08  2:14     ` C array to Ada pointer to unconstrained array without copying memory Robert I. Eachus
2003-10-08  9:27       ` Duncan Sands
2003-10-08 22:43         ` Robert I. Eachus
2003-10-09  9:31           ` Duncan Sands
2003-10-08 14:07 ` Steve Adams
2003-10-08 14:33   ` Preben Randhol
2003-10-09 23:04     ` Steve Adams
2003-10-09 23:11       ` Steve Adams
2003-10-08 16:30   ` Duncan Sands
2003-10-09 22:59     ` C array to Ada pointer to unconstrained array without copyingmemory Steve Adams
2003-10-10  7:02       ` Duncan Sands
2003-10-10 16:44         ` C array to Ada pointer to unconstrained array withoutcopyingmemory Steve Adams
2003-10-23 21:27   ` C array to Ada pointer to unconstrained array without copying memory Craig Carey
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox