|
Boost Users : |
Subject: Re: [Boost-users] Collecting boost multi-index meta data
From: Gokulakannan Somasundaram (gokul007_at_[hidden])
Date: 2011-03-25 07:22:40
Thanks a lot. I think this should do.
Thanks,
Gokul.
On Thu, Mar 24, 2011 at 7:13 PM, <joaquin_at_[hidden]> wrote:
> Gokulakannan Somasundaram escribió:
>
> Hi Joaquín ,
>> I am extremely sorry, i missed your mail. First of all thanks
>> a lot for replying.
>>
>
> No problem. Please don't top-post:
> http://www.boost.org/community/policy.html#quoting
>
> I have fixed the issue for now. But i am actually explaining the issue
>> i had. Please take a shot at it.
>> Say i have an object and i have created multi index on some
>> members of the object. Now since,
>> this is being used in a multi-threaded code, i will acquire a mutex on
>> the whole multi-index, only if i have
>> updated those attributes involved in the multi-index build. Else i
>> won't take the mutex.
>> Now my problem is, i have multi-indexed many such classes.
>> what is the best way to check whether
>> the updated attribute is part of multi-index. Currently we have
>> written a python code which scans the C++
>> files and creates a list of attribute numbers ( each member attribute
>> has a number associated with it ).
>> Whenever there is an update, we check against the list produced by the
>> python code in C++.
>> My question was if there is a way to do this within C++ itself.
>>
>
> If we had the following metafunction to check whether a particular
> key extractor is used with a multi_index_container or not:
>
> template<typename KeyExtractor,typename MultiIndexContainer>
> struct is_key_extractor_of{};
>
> then it is easy to know at compile time if a particular member of a class
> is
> referenced by a member<...> key extractor (composite keys are harder and
> left as an exercise to the reader):
>
> struct A
> {
> int a,b,c,d,e,f;
> };
>
> typedef multi_index_container<
> int,
> indexed_by<
> ordered_unique<member<A,int,&A::a> >,
> sequenced<>,
> >
> > multi_t;
>
> BOOST_MPL_ASSERT ((is_key_extractor_of<member<A,int,&A::a>,multi_t>));
> BOOST_MPL_ASSERT_NOT((is_key_extractor_of<member<A,int,&A::e>,multi_t>));
>
> Full code provided in the attachment. Does this help to implement your
> scenario?
>
> Joaquín M López Muñoz
> Telefónica, Investigación y Desarrollo
>
>
> Este mensaje se dirige exclusivamente a su destinatario. Puede consultar
> nuestra política de envío y recepción de correo electrónico en el enlace
> situado más abajo.
> This message is intended exclusively for its addressee. We only send and
> receive email on the basis of the terms set out at.
> http://www.tid.es/ES/PAGINAS/disclaimer.aspx
>
> _______________________________________________
> 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