00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef NOISE_MODULEBASE_H
00024 #define NOISE_MODULEBASE_H
00025
00026 #include <stdlib.h>
00027 #include <assert.h>
00028 #include <math.h>
00029 #include "../basictypes.h"
00030 #include "../exception.h"
00031 #include "../noisegen.h"
00032
00033 namespace CS {
00034 namespace Math {
00035 namespace Noise {
00036 namespace Module {
00037
00040
00044
00222 class CS_CRYSTALSPACE_EXPORT Module
00223 {
00224
00225 public:
00226
00228 Module (int sourceModuleCount);
00229
00231 ~Module ();
00232
00251 virtual const Module& GetSourceModule (int index) const
00252 {
00253 assert (m_pSourceModule != NULL);
00254
00255
00256
00257
00258
00259
00260
00261
00262 if (index >= GetSourceModuleCount () || index < 0
00263 || m_pSourceModule[index] == NULL) {
00264
00265 CS_ASSERT (false);
00266 }
00267 return *(m_pSourceModule[index]);
00268 }
00269
00275 virtual int GetSourceModuleCount () const = 0;
00276
00296 virtual double GetValue (double x, double y, double z) const = 0;
00297
00328 virtual void SetSourceModule (int index, const Module& sourceModule)
00329 {
00330 assert (m_pSourceModule != NULL);
00331 if (index >= GetSourceModuleCount () || index < 0) {
00332
00333 CS_ASSERT (false);
00334 }
00335 m_pSourceModule[index] = &sourceModule;
00336 }
00337
00338 protected:
00339
00342 const Module** m_pSourceModule;
00343
00344 private:
00345
00352 const Module& operator= (const Module& m)
00353 {
00354 return *this;
00355 }
00356
00357 };
00358
00360
00362
00363 }
00364 }
00365 }
00366 }
00367
00368 #endif