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
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
#include #include #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