comp.lang.ada
 help / color / mirror / Atom feed
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



             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