00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _SEQUENCE_H_
00022 #define _SEQUENCE_H_
00023
00024 #include "point.h"
00025 #include "../fractalparameters.h"
00026
00027 #include <QtCore/QVarLengthArray>
00028
00029 typedef QVarLengthArray<Point> PointsSequence;
00030
00035 class Sequence
00036 {
00037 protected:
00038 PointsSequence m_sequence;
00039 const FractalParameters * m_fractal_parameters;
00040 Point m_point;
00041
00042 public:
00047 Sequence( const FractalParameters * _fractal_parameters )
00048 {
00049 m_fractal_parameters = _fractal_parameters;
00050 m_sequence.reserve( _fractal_parameters->sequenceMax() );
00051 }
00052
00058 virtual const PointsSequence& compute( const Point& _init_point )
00059 {
00060 m_sequence.clear();
00061
00062 Point point = init( _init_point );
00063
00064 unsigned int index_sequence = 0;
00065 while( ! end( point ) && index_sequence < m_fractal_parameters->sequenceMax() )
00066 {
00067 m_sequence.append( point );
00068 index_sequence++;
00069 point = next( point );
00070 }
00071
00072 if( index_sequence == m_fractal_parameters->sequenceMax() )
00073 m_sequence.clear();
00074 return m_sequence;
00075
00076 }
00077
00078 protected:
00084 virtual Point init( const Point& _init_point ) = 0;
00090 virtual Point next( const Point& _point ) = 0;
00096 virtual bool end( const Point& _point ) = 0;
00097 };
00098
00099 #endif //_SEQUENCE_H_