libpsynth 0.2.1
Classes | Namespaces | Defines
/home/raskolnikov/dev/psynth/trunk/src/psynth/base/c3_class.hpp File Reference

Time-stamp: <2011-03-24 18:37:13 raskolnikov> More...

#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/empty.hpp>
#include <boost/mpl/lambda.hpp>
#include <boost/mpl/transform.hpp>
#include <boost/mpl/contains.hpp>
#include <boost/mpl/pop_front.hpp>
#include <boost/mpl/push_front.hpp>
#include <boost/mpl/front.hpp>
#include <boost/mpl/reverse.hpp>
#include <boost/mpl/inherit_linearly.hpp>
#include <boost/mpl/list.hpp>
#include <psynth/base/meta.hpp>
Include dependency graph for c3_class.hpp:

Go to the source code of this file.

Classes

struct  psynth::base::detail::do_merge_lists< ReversedPartialResult, RemainingInputs >
struct  psynth::base::detail::do_merge_lists< ReversedPartialResult, RemainingInputs >::candidate< C >
struct  psynth::base::detail::do_merge_lists< ReversedPartialResult, RemainingInputs >::candidate< C >::tail_p< L >
struct  psynth::base::detail::do_merge_lists< ReversedPartialResult, RemainingInputs >::candidate_at_head< L >
struct  psynth::base::detail::do_merge_lists< ReversedPartialResult, RemainingInputs >::candidate_at_head_p< L >
struct  psynth::base::detail::do_merge_lists< ReversedPartialResult, RemainingInputs >::remove_next< L >
struct  psynth::base::detail::merge_lists< ReversedPartialResult, RemainingInputs >
struct  psynth::base::direct_superclasses< ClsDef >
struct  psynth::base::all_superclasses< ClsDef >
struct  psynth::base::detail::c3_inheriter< ClsDefList, false >
struct  psynth::base::detail::c3_inheriter< ClsDefList, true >
struct  psynth::base::generate_c3_hierarchy< ClsDef >
struct  psynth::base::get_c3_type< ClsImpl >

Namespaces

namespace  psynth
namespace  psynth::base
namespace  psynth::base::detail

Defines

#define PSYNTH_C3_CLASS_BEGIN(cls_name,...)
#define PSYNTH_C3_CLASS_END(cls_name)

Detailed Description

Time-stamp: <2011-03-24 18:37:13 raskolnikov>

Author:
Juan Pedro Bolivar Puente <raskolnikov@es.gnu.org>
Date:
Sat Dec 25 20:32:07 2010

Linearization of class hierarchies. http://192.220.96.201/dylan/linearization-oopsla96.html

All ClsDef parameters have this shape:

struct mycls_def { template <class super>=""> class impl { ... }; typedef mpl::vector<...> bases; };


Define Documentation

#define PSYNTH_C3_CLASS_BEGIN (   cls_name,
  ... 
)
Value:
struct cls_name ## _c3                                              \
    {                                                                   \
    typedef ::boost::mpl::transform< ::boost::mpl::list<__VA_ARGS__>, ::boost::mpl::quote1< ::psynth::base::get_c3_type > >::type bases; \
    template<class Super>                                               \
    class impl : public Super
#define PSYNTH_C3_CLASS_END (   cls_name)
Value:
};                                                                  \
    typedef ::psynth::base::generate_c3_hierarchy<cls_name ## _c3>::type cls_name;