CRandVar.extern.h

00001 /*  _________________________________________________________________________
00002  *
00003  *  UTILIB: A utility library for developing portable C++ codes.
00004  *  Copyright (c) 2001, Sandia National Laboratories.
00005  *  This software is distributed under the GNU Lesser General Public License.
00006  *  For more information, see the README file in the top UTILIB directory.
00007  *  _________________________________________________________________________
00008  */
00009 
00010 //
00011 // CRandVar.extern.h
00012 //
00019 #ifndef _CRandVar_extern_h
00020 #define _CRandVar_extern_h
00021 
00022 #include "CRandVar.h"
00023 
00024 
00025 class UTILIB_API externCRandVar : public CRandVar {
00026 
00027 public:
00028 
00030   externCRandVar(RNG* rng);
00032   virtual double operator()();
00033 
00034 private:
00035 
00037   virtual double  eval_c_func() = 0;
00038  
00039 };
00040 
00041 
00042 inline externCRandVar::externCRandVar(RNG* rng)
00043 : CRandVar(rng) {}
00044 
00045 
00046 inline double externCRandVar::operator()()
00047 {
00048 extern void set_global_RNG(RNG* rng);
00049 
00050 if (generator() == NULL) {
00051    ErrReturn("externCRandVar::operator() : Attempting to use a NULL generator.");
00052    }
00053 else {
00054    set_global_RNG(generator());
00055    return eval_c_func();
00056    }
00057 }
00058 
00059 #endif