Lumiera  0.pre.03
»edityourfreedom«
applicable-builder-target-types.hpp File Reference

Go to the source code of this file.

Description

Declaration of all kinds of MObjects to be treated by some "Builder tool".

This is part of Lumiera's visitation mechanism: Individual MObject subclasses may declare by the DEFINE_PROCESSABLE_BY macro to be specifically processable by a builder tool (visitor). On the other hand, any concrete builder tool (visitor) is free to define a treat(Type) function for each of these specific subclasses. If the tool doesn't define such a specific treat(..) function, the next suitable function for a supertype will be used.

Now there needs to be one location where all the specific kinds of treat-able MObjects are declared together (in a typelist). Moreover, we need the full declaration of these classes. This is the catch of using the visitor pattern. Thus, any class to be treated specifically (as opposed to be just treated through a supertype or super interface) has two liabilities:

  • DEFINE_PROCESSABLE_BY
  • declare the type here in this file, including the header.
Note
actually the ApplicableBuilderTargetTypes template, when used (as a baseclass of any concrete builder tool, causes the generation of the necessary dispatcher tables used by our visitor implementation.
See also
buildertool.hpp
buildertooltest.hpp
nodecreatertool.hpp

Definition in file applicable-builder-target-types.hpp.

Classes

struct  ApplicableBuilderTargetTypes< TOOL >
 Marker used to declare some visiting Tool class to be actually a mobject::builder::BuilderTool and to possibly accept and treat the common selection of types to be handled by any such builder tool. More...
 

Typedefs

typedef Types< session::Root, session::Clip, session::Effect, session::Binding, session::AbstractMO >::List BuilderTargetTypes
 

Namespaces

 proc
 Proc-Layer implementation namespace root.
 
 proc::mobject
 Media-Objects, edit operations and high-level session.
 
 proc::mobject::builder
 Namespace of the Builder, transforming high-level into low-level.