2 #include "mof/stream/Manipulator.hpp"
3 #include "mof/stream/Cache.hpp"
8 #define DEFAULT_CASCADOR Multiply
13 inline static T apply(const T& a , const T& b)
23 inline static T apply(const T& a , const T& b)
29 //{{{ struct Overwrite
33 inline static T apply(const T& , const T& b)
40 template< typename T , class Cascador = DEFAULT_CASCADOR< T > >
41 class Cascade : public Manipulator< T >{
43 typedef typename std::shared_ptr< Cascade > Handler;
49 virtual T value( FrameNumber frame) const
51 T obj = m_list[0]->value(frame);
52 for(unsigned int i = 1 ; i < m_list.size() ; i++)
54 obj = Cascador::apply(obj , m_list[i]->value(frame));
65 void add( const typename Manipulator<T>::Handler& handler )
67 m_list.push_back( handler );
72 typedef std::vector< typename Manipulator< T >::Handler > List;
77 const typename Manipulator< T >::Handler& front ,
78 const typename Manipulator< T >::Handler& back
81 int length = &back - &front + 1;
82 if(length <= 0)throw std::invalid_argument("list size is 0");
84 for( int i = 0 ; i < length ; i++)
86 m_list.push_back( (&front)[i] );
93 template< typename T , class Cascador >
94 friend typename std::shared_ptr< Cascade< T , Cascador > >
97 const typename Manipulator< T >::Handler& front ,
98 const typename Manipulator< T >::Handler& back
101 template< typename T , class Cascador >
102 friend typename std::shared_ptr< Cascade< T , Cascador > > makeCascadeHandler();
108 template< typename T , class Cascador >
109 std::shared_ptr< Cascade< T , Cascador > >
112 const typename Manipulator< T >::Handler& front ,
113 const typename Manipulator< T >::Handler& back
116 return typename Cascade< T , Cascador >::Handler
118 new Cascade< T , Cascador >( front , back )
122 template< typename T , class Cascador >
123 typename std::shared_ptr< Cascade< T , Cascador > >
124 makeCascadeHandler( )
126 return typename Cascade< T , Cascador >::Handler
128 new Cascade< T , Cascador >
132 template<typename T >
133 typename std::shared_ptr< Cascade< T , DEFAULT_CASCADOR< T > > >
136 const typename Manipulator< T >::Handler& front ,
137 const typename Manipulator< T >::Handler& back
140 return makeCascadeHandler< T , DEFAULT_CASCADOR< T > >( front , back );
143 template<typename T >
144 typename std::shared_ptr< Cascade< T , DEFAULT_CASCADOR< T > > >
145 makeCascadeHandler( )
147 return makeCascadeHandler< T , DEFAULT_CASCADOR< T > >();
151 template< typename T , class Cascador >
152 std::shared_ptr< Cascade< T , Cascador > >&
155 std::shared_ptr< Cascade< T , Cascador > >& a ,
156 const typename Manipulator< T >::Handler& b
163 template< typename T , class Cascador >
164 typename std::shared_ptr< Cascade< T , Cascador > >&
167 std::shared_ptr< Cascade< T , Cascador > >& a ,
171 a->add( mof::makeConstantHandler( b ) );