A portable, open-source, coherent noise-generating library for C++
Main Page | Modules | Class Hierarchy | Class List | File List | Class Members # 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