Changeset 44696


Ignore:
Timestamp:
Apr 21, 2008, 1:41:49 PM (10 years ago)
Author:
matus.chochlik
Message:

Minor changes to meta_class.hpp

Location:
sandbox/mirror
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sandbox/mirror/boost/mirror/meta_class.hpp

    r44693 r44696  
    259259                         *  for the inherited attributes.
    260260                         */
    261                         template <class meta_inheritance, class current_list>
     261                        template <class current_list, class meta_inheritance>
    262262                        struct get_base_class_attrib_owner_and_offs
    263263                        {
     
    272272                                                current_list
    273273                                        > offset;
     274                                typedef typename mpl::pair<
     275                                                meta_class,
     276                                                offset         
     277                                        > pair;
     278                               
     279                                template<typename T>
     280                                struct get_pair
     281                                {
     282                                        typedef pair type;
     283                                };
    274284
    275285                                typedef typename mpl::accumulate<
    276                                                 type_list,
    277                                                 mpl::vector0<>,
    278                                                 mpl::pair<
    279                                                         meta_class,
    280                                                         offset         
    281                                                 >
     286                                        type_list,
     287                                        current_list,
     288                                        mpl::push_back<
     289                                                mpl::_1,
     290                                                get_pair<mpl::_>
     291                                        >
    282292                                >::type type;
    283293                        };
     
    289299                                base_class_layout,
    290300                                mpl::vector0<>,
    291                                 mpl::insert_range<
     301                                get_base_class_attrib_owner_and_offs<
    292302                                        mpl::_1,
    293                                         mpl::end<mpl::_1>,
    294                                         get_base_class_attrib_owner_and_offs<
    295                                                 mpl::_2,
    296                                                 mpl::_1
    297                                         >
    298                                 >
    299                         >::type inherited_member_owners_and_offsets;
     303                                        mpl::_2
     304                                >
     305                        >::type inherited_attrib_owners_and_offsets;
    300306
    301307                       
    302                         /** The count of virtually attributes
     308                        /** The count of virtually inherited attributes
    303309                         */
    304310                        typedef typename mpl::accumulate<
     
    320326                         *  virtually inherited.
    321327                         */
    322                         template <int I>
     328                        template <long I>
    323329                        struct is_virtually_inherited
    324330                        : mpl::less<
     
    328334
    329335
    330                         /** This template gets the regular_base_class_layout
    331                          *  of a base class when given a meta_inheritance
    332                          *  specialization for this base class.
    333                         template <class meta_inheritance>
    334                         struct get_base_class_inheritance_hierarchy
    335                         {
    336                                 typedef typename mpl::push_back<
    337                                                 meta_inheritance::
    338                                                 meta_class::
    339                                                 all_attributes::
    340                                                 detail::
    341                                                 regular_base_class_layout type;
    342                         };
    343                          */
    344                        
    345                         /** The inheritance hierarchy of non-virtual
    346                          *  base classes of the reflected class.
    347                         typedef typename mpl::accumulate<
    348                                 list_of_regular_base_classes,
    349                                 mpl::vector0<>,
    350                                 mpl::accumulate<
    351                                                 get_base_class_regular_layout<
    352                                                         mpl::_2
    353                                                 >,
    354                                                 mpl::vector0<>,
    355                                 >
    356                          */
    357 /*
    358                                         mpl::insert_range<
    359                                                 mpl::_1,
    360                                                 mpl::end<mpl::_1>,
    361                                         >
    362                         >::type regular_base_class_layout;
    363 */
    364                        
    365 
    366336
    367337                        /** This template is used to query the return value
    368338                         *  type of the getter for the I-th member attribute
    369339                         */
    370                         template <int I>
     340                        template <long I>
    371341                        struct result_of_get
    372342                        {
     
    377347                        };             
    378348       
    379                         /** This function is used to get the members of virtual
     349               
     350                        /** This function is used to get the member attributes
    380351                         *  base classes.
    381352                         */
    382                         template <class a_class, int I>
     353                        template <class a_class, long I>
    383354                        static typename result_of_get<I>::type
    384                         get(a_class context, mpl::int_<I> pos, mpl::bool_<true>)
    385                         {
    386                                 typedef meta_class<a_class, variant_tag> meta_class;
    387                                
    388                                 return meta_class::attributes::get(context, pos);
    389                         }
    390                
    391                         /** This function is used to get the members of regular
    392                          *  base classes.
    393                          */
    394                         template <class a_class, int I>
    395                         static typename result_of_get<I>::type
    396                         get(a_class context, mpl::int_<I> pos, mpl::bool_<false>)
    397                         {
    398                                 typedef meta_class<a_class, variant_tag> meta_class;
    399 
    400                                 return meta_class::attributes::get(context, pos);
     355                        get(a_class context, mpl::int_<I> pos)
     356                        {
     357                                typedef typename mpl::at<
     358                                        typename detail::inherited_attrib_owners_and_offsets,
     359                                        mpl::int_<I>
     360                                >::type owner_and_offset;
     361
     362                                typedef typename owner_and_offset::first meta_class;
     363                                typedef typename mpl::minus<
     364                                        mpl::int_<I>,
     365                                        typename owner_and_offset::second
     366                                >::type new_pos_type;
     367
     368                                return meta_class::attributes::get(context, new_pos_type());
    401369
    402370                        }
     
    421389               
    422390                /**
    423                 template <class a_class, int I>
    424                 static typename detail::result_of_get<I>::type
     391                 */
     392                template <class a_class, long I>
     393                static typename detail::template result_of_get<I>::type
    425394                get(a_class context, mpl::int_<I> pos)
    426395                {
    427                         // is the attrib virtually inherited
    428                         typedef typename detail::
    429                                 is_virtually_inherited<I> is_virtual;           
    430                         //
    431                         // the index of the attribute
    432                         typedef typename mpl::if<
    433                                         is_virtual,
    434                                         pos,
    435                                         mpl::minus<
    436                                                 pos
    437                                         >
    438                                 >::type att_pos;
    439                         //
    440396                        return detail::get(
    441397                                context,
    442                                 att_pos,
    443                                 is_virtual
     398                                pos
    444399                        );
    445400                }
    446                  */
    447401        }; // all_attrbutes
    448402
  • sandbox/mirror/libs/examples/registering/virtual_bases.cpp

    r44690 r44696  
    256256        t.w = L'0';
    257257        //
     258        bcout << meta_T::all_attributes::get(t, mpl::int_<0>()) << endl;
    258259        //
    259260        bcout << "--------------------------------------------" << endl;
     
    262263        bcout << meta_T::all_attributes::detail::is_virtually_inherited<5>::value << endl;
    263264        //
     265        //
    264266        return 0;
    265267}
    266268
     269
     270
     271
     272
     273
     274
     275
     276
     277
     278
     279
     280
     281
     282
     283
     284
     285
     286
Note: See TracChangeset for help on using the changeset viewer.