From: taashlo@sandia.gov
Subject: How to Emulate C++ Macro with Static Local Variable?
Date: 24 Sep 2003 16:06:41 -0600
Date: 2003-09-24T16:06:41-06:00 [thread overview]
Message-ID: <ullsdvo26.fsf@sandia.gov> (raw)
Hello,
I'm trying to port a small C++ library to Ada95. Most of it is going
quite well in that the Ada implementation is smaller, simpler, and
easier to follow than the C++ implementation. But I've ran into a
hurdle with the following C++ construction:
class Test {
...
protected:
struct s {
int data[8];
};
...
void bar(s *t, int foo);
#define BAR(foo_) if (1) { \
static s t_; \
bar(&t_, foo_);\
} else ((void)0)
...
};
What happens is that when you do this:
BAR(10);
it expands to this:
if (1) {
static s t_;
bar(&t_, 10);
} else ((void)0);
This, in effect, creates a (hidden) static local variable for each call
to bar(). This static variable (actually a structure, t_) is used to
cache information for each unique call to bar() such that subsequent
calls from that location can be processed *much* faster.
For instance, the following code would create three of the hidden local
variables:
for (int i = 0; i < 55; ++i) {
switch (wozit()) {
case 1: BAR(10); break;
case 2: BAR(20); break;
case 3: BAR(30); break;
}
}
The first time each BAR() is encountered, it does the full processing,
but subsequent calls to the *same* BAR() used it's unique cached
information and go much faster.
Any ideas on how I can achieve this with Ada95?
Thank you,
Tad
next reply other threads:[~2003-09-24 22:06 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-09-24 22:06 taashlo [this message]
2003-09-24 23:44 ` How to Emulate C++ Macro with Static Local Variable? Robert I. Eachus
2003-09-25 3:27 ` Hyman Rosen
2003-09-25 4:53 ` tmoran
2003-09-25 15:57 ` Robert I. Eachus
2003-09-25 19:09 ` tmoran
2003-09-29 14:57 ` taashlo
2003-09-29 18:12 ` Jeffrey Carter
2003-09-29 18:51 ` taashlo
2003-09-30 1:32 ` Jeffrey Carter
2003-09-30 1:54 ` tmoran
2003-09-30 13:02 ` taashlo
2003-09-30 20:25 ` Jeffrey Carter
2003-09-30 2:45 ` Robert I. Eachus
2003-09-30 3:24 ` tmoran
2003-09-25 13:43 ` Stephen Leake
2003-09-25 12:59 ` Tad Ashlock
2003-09-25 16:11 ` Robert I. Eachus
2003-09-25 18:13 ` Randy Brukardt
2003-09-25 23:40 ` Robert I. Eachus
2003-09-25 11:54 ` Gautier
2003-09-25 16:14 ` Robert I. Eachus
2003-09-25 18:06 ` Tad Ashlock
2003-09-28 8:42 ` Gautier Write-only
2003-09-28 20:06 ` Jeffrey Carter
2003-09-29 2:13 ` Gautier Write-only
2003-09-25 13:41 ` Stephen Leake
2003-09-25 17:23 ` Tad Ashlock
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox