Thanks for your response. I'm actually completely confused as to what you're doing. I notice you're using __COUNTER__, however couldn't I just use __COUNTER__ without boost? What would the code look like for that? I don't understand the need for this patch to the boost counter library.

On Dec 20, 2007 9:45 PM, Andry <andry@inbox.ru> wrote:
Hello Robert,

Friday, December 21, 2007, 1:46:24 AM, you wrote:

RD> If I have to do it manually it pretty much defeats the
RD> purpose of using it in the first place. I want it to be automated.
You can download here
https://sourceforge.net/project/showfiles.php?group_id=198908&package_id=243070&release_id=552700
patch to boost 1.34.1 which adding to preprocessor some additional
functionality in which is BOOST_PP_ASSIGN_SLOT_BUILTIN_COUNTER.
Purpose of this macro is assigning to slots builtin counters like
__COUNTER__, here the example:

//////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <boost/preprocessor/slot/slot.hpp>
#include <boost/preprocessor/arithmetic/sub.hpp>

#define BUILTIN_COUNTER __COUNTER__

int builtin_counter_already_utilized_somewhere[] = {
 BUILTIN_COUNTER,BUILTIN_COUNTER,BUILTIN_COUNTER,BUILTIN_COUNTER,
 BUILTIN_COUNTER,BUILTIN_COUNTER,BUILTIN_COUNTER,BUILTIN_COUNTER,
 BUILTIN_COUNTER,BUILTIN_COUNTER
};

//Remember and increment last build-in counter value.
//WARNING: Slot #1 can be used by another (external) code (for example, by another included header),
//         you should exactly know that slot #1 doesn't used some else where between includes.
#define BOOST_PP_VALUE BUILTIN_COUNTER
#include BOOST_PP_ASSIGN_SLOT_BUILTIN_COUNTER(1) //Evaluate BOOST_PP_VALUE as built-in counter and push it in slot #1

#define MYCOUNTER BOOST_PP_SUB(BUILTIN_COUNTER,BOOST_PP_SLOT(1))

int main() {
 int myarray[] = {MYCOUNTER,MYCOUNTER,MYCOUNTER,MYCOUNTER};
 printf("builtin_counter_already_utilized_somewhere:\n");
 for(int i = 0; i < sizeof(builtin_counter_already_utilized_somewhere)/sizeof(builtin_counter_already_utilized_somewhere[0]); i++) {
   printf("%d\n",builtin_counter_already_utilized_somewhere[i]);
 }
 printf("myarray:\n");
 for(int i = 0; i < sizeof(myarray)/sizeof(myarray[0]); i++) {
   printf("%d\n",myarray[i]);
 }
 printf("__COUNTER__ = %u\n",BUILTIN_COUNTER);
 return 0;
}
//////////////////////////////////////////////////////////////////////////

You should use BOOST_PP_ASSIGN_SLOT_BUILTIN_COUNTER instead BOOST_PP_ASSIGN_SLOT
when defining BOOST_PP_VALUE to built-in counter macro.

In your code you should do something what:
//////////////////////////////////////////////////////////////////////////
   #define BOOST_PP_VALUE __COUNTER__
   #include BOOST_PP_ASSIGN_SLOT_BUILTIN_COUNTER(1)

   #define CHECK_MATCH_AND_RETURN( action ) if( str == #action ) {
   return action; } void(__COUNTER__);

   CHECK_MATCH_AND_RETURN( ROTATE_LEFT )
   CHECK_MATCH_AND_RETURN( ROTATE_RIGHT )
   CHECK_MATCH_AND_RETURN( ROTATE_UP )
   CHECK_MATCH_AND_RETURN( ROTATE_DOWN )
   CHECK_MATCH_AND_RETURN( MOVE_UP )
   CHECK_MATCH_AND_RETURN( MOVE_DOWN )
   CHECK_MATCH_AND_RETURN( MOVE_LEFT )
   CHECK_MATCH_AND_RETURN( MOVE_RIGHT )
   CHECK_MATCH_AND_RETURN( MOVE_FORWARD )
   CHECK_MATCH_AND_RETURN( MOVE_BACKWARD )
   CHECK_MATCH_AND_RETURN( ROLL_RIGHT )
   CHECK_MATCH_AND_RETURN( ROLL_LEFT )
   CHECK_MATCH_AND_RETURN( INCREASE_ACCEL )
   CHECK_MATCH_AND_RETURN( DECREASE_ACCEL )
   CHECK_MATCH_AND_RETURN( ENABLE_LOOK )
   CHECK_MATCH_AND_RETURN( TOGGLE_LOOK )
   CHECK_MATCH_AND_RETURN( ENABLE_AUTO_MOVE )
   CHECK_MATCH_AND_RETURN( TOGGLE_AUTO_MOVE )

   // This helps me remember to add/remove items above.
   BOOST_STATIC_ASSERT( BOOST_PP_SUB(__COUNTER__,BOOST_PP_SLOT(1))+1 != NUM_CAMERAACTIONS );
//////////////////////////////////////////////////////////////////////////

PS: GNU C/C++ recently supports __COUNTER__ macro from 4.3 version.

--
Best regards,
 Andry                            mailto: andry@inbox.ru

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users