Boost logo

Boost Users :

From: Robert Dailey (rcdailey_at_[hidden])
Date: 2007-12-21 11:10:50


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_at_[hidden]> 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_at_[hidden]
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net