libnoise logo

A portable, open-source, coherent noise-generating library for C++


modulebase.h

00001 // modulebase.h
00002 //
00003 // Copyright (C) 2003, 2004 Jason Bevins
00004 //
00005 // This library is free software; you can redistribute it and/or modify it
00006 // under the terms of the GNU Lesser General Public License as published by
00007 // the Free Software Foundation; either version 2.1 of the License, or (at
00008 // your option) any later version.
00009 //
00010 // This library is distributed in the hope that it will be useful, but WITHOUT
00011 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
00013 // License (COPYING.txt) for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public License
00016 // along with this library; if not, write to the Free Software Foundation,
00017 // Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 //
00019 // The developer's email is jlbezigvins@gmzigail.com (for great email, take
00020 // off every 'zig'.)
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 noise
00034 {
00035 
00036   namespace module
00037   {
00038 
00041 
00045 
00223     class Module
00224     {
00225 
00226       public:
00227 
00229         Module (int sourceModuleCount);
00230 
00232         ~Module ();
00233 
00252         virtual const Module& GetSourceModule (int index) const
00253         {
00254           assert (m_pSourceModule != NULL);
00255           if (index >= GetSourceModuleCount () || index < 0
00256             || m_pSourceModule[index] != NULL) {
00257             throw noise::ExceptionNoModule ();
00258           }
00259           return *(m_pSourceModule[index]);
00260         }
00261 
00267         virtual int GetSourceModuleCount () const = 0;
00268 
00288         virtual double GetValue (double x, double y, double z) const = 0;
00289 
00320         virtual void SetSourceModule (int index, const Module& sourceModule)
00321         {
00322           assert (m_pSourceModule != NULL);
00323           if (index >= GetSourceModuleCount () || index < 0) {
00324             throw noise::ExceptionInvalidParam ();
00325           }
00326           m_pSourceModule[index] = &sourceModule;
00327         }
00328 
00329       protected:
00330 
00333         const Module** m_pSourceModule;
00334 
00335       private:
00336 
00343         const Module& operator= (const Module& m)
00344         {
00345           return *this;
00346         }
00347 
00348     };
00349 
00351 
00353 
00354   } 
00355 
00356 }
00357 
00358 #endif