00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _FRACTAL_MT_H_
00022 #define _FRACTAL_MT_H_
00023
00024 #include "fractal_thread.h"
00025
00026 #include "pointsgenerators/imagepointsgenerator.h"
00027
00032 template< typename TSequence, typename TPointsGenerator, typename TAccumulator >
00033 class Fractal_MT_Mother : public Fractal
00034 {
00035 protected:
00036 typedef Fractal_Thread< TSequence, TPointsGenerator, TAccumulator > TFractal_Thread;
00037
00038 private:
00039 bool m_is_thread_not_generated, m_is_thread_deleted;
00040
00041 protected:
00042 QVector< TFractal_Thread* > m_fractal_threads;
00043 TFractal_Thread m_fractal_result;
00044 unsigned int m_thread_count;
00045
00046 public:
00047 Fractal_MT_Mother( const FractalParameters& _fractal_parameters, const unsigned int _thread_count );
00048
00049 virtual qreal progress() const;
00050 virtual void stop();
00051 virtual QImage toImage( const Palette& _palette ) const;
00052
00053 virtual int load( QFile& _file );
00054 virtual int save( QFile& _file ) const;
00055
00056 protected:
00060 virtual void generateThreads();
00064 virtual void generateFractalResult();
00065
00066 virtual void run();
00067
00068 };
00069
00073 template< typename TSequence, typename TPointsGenerator, typename TAccumulator >
00074 class Fractal_MT : public Fractal_MT_Mother< TSequence, TPointsGenerator, TAccumulator >
00075 {
00076 public:
00077 Fractal_MT( const FractalParameters& _fractal_parameters, const unsigned int _thread_count );
00078 };
00079
00080
00084 template< typename TSequence >
00085 class Fractal_MT< TSequence, ImagePointsGenerator, CenterAccumulator > : public Fractal_MT_Mother< TSequence, ImagePointsGenerator, CenterAccumulator >
00086 {
00087 public:
00088 Fractal_MT( const FractalParameters& _fractal_parameters, const unsigned int _thread_count );
00089
00090 protected:
00091 void generateThreads();
00092 void generateFractalResult();
00093 };
00094
00095
00096 #include "fractal_mt.inl"
00097
00098 #endif //_FRACTAL_MT_H_