From: blakemor@software.org (Alex Blakemore)
Subject: Re: C Strings in Ada?
Date: 10 Jun 90 20:38:41 GMT [thread overview]
Message-ID: <1304@software.software.org> (raw)
In-Reply-To: 920025@hpclapd.HP.COM
In article <920025@hpclapd.HP.COM> defaria@hpclapd.HP.COM (Andy DeFaria) writes:
>What is the best way to represent C_Strings in Ada?
Dave Emery presented the following solution for some compilers.
$$ procedure to_c (str : string)
$$ is
$$ procedure c_routine (addr : system.address);
$$ pragma interface (C, c_routine); -- (void) c_routine(s)
$$ -- char * s;
$$ c_string : constant string := str & Ascii.NUL;
$$ begin
$$ c_routine(c_string(c_string'first)'address);
$$ end to_c;
$$
$$ function from_c
$$ return string
$$ is
$$ function c_function
$$ return System.address;
$$ pragma interface (C, c_function); -- char * c_function
$$ function strlen (addr : System.address)
$$ return integer;
$$ pragma interface (C, strlen); -- the C function of
$$ -- the same name
$$ addr_from_c : System.address;
$$ begin
$$ addr_from_c := c_function;
$$ declare
$$ answer : string(1..strlen(addr_from_c);
$$ for answer'address use at addr_from_c;
$$ begin
$$ return answer;
$$ end;
$$ end from_c;
Mr. DeFaria replied
> I kinda agree with you that the "right" way to do this would be to keep Ada
> strings as Ada strings and do the conversion in package but you have not
> addressed one of my critical concerns: What about the overhead incurred by
> having to call the heap manager to allocate a new string just to append
> ASCII.NUL so that the C routine I'm calling will be able to handle it
I dont think this solution *requires* heap allocation. A good compiler would
be free to use stack space for the C strings in these cases, both for
the local constant c_string and for the return value. Of course, there is
the overhead of copying the strings but the allocation can be relatively
cheap.
-----------------------------------------------------------------------
Alex Blakemore Internet: blakemore@software.org
Software Productivity Consortium UUNET: ...!uunet!software!blakemore
2214 Rock Hill Rd, Herndon VA 22070 Bellnet: (703) 742-7125
next prev parent reply other threads:[~1990-06-10 20:38 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
1990-06-04 22:45 C Strings in Ada? Andy DeFaria
1990-06-07 17:41 ` stt
1990-06-08 16:00 ` Andy DeFaria
1990-06-10 20:38 ` Alex Blakemore [this message]
1990-06-11 12:57 ` Allan Doyle
1990-06-11 14:59 ` David Kassover
1990-06-11 19:48 ` Allan Doyle
1990-06-11 21:01 ` David Kassover
1990-06-11 22:30 ` Mike Murphy
1990-06-13 21:20 ` Edward Falis
1990-06-11 17:53 ` David Emery
1990-06-11 19:59 ` Allan Doyle
1990-06-15 7:53 ` Jeff Bartlett
1990-06-11 22:39 ` Andy DeFaria
1990-06-12 14:04 ` David Emery
1990-06-12 18:11 ` Mike Murphy
1990-06-13 13:43 ` stt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox