1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*********************************************************************************** 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott random_number.cpp 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1997 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Mark of the Unicorn, Inc. 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use, copy, modify, distribute and sell this software 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and its documentation for any purpose is hereby granted without fee, 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided that the above copyright notice appear in all copies and 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * that both that copyright notice and this permission notice appear 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * in supporting documentation. Mark of the Unicorn makes no 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * representations about the suitability of this software for any 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * purpose. It is provided "as is" without express or implied warranty. 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott***********************************************************************************/ 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "random_number.h" 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "Prefix.h" 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (EH_NEW_HEADERS) 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <functional> 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <cstdlib> 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <function.h> 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stdlib.h> 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottunsigned random_number( size_t range ) 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined( __SGI_STL ) 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (range == 0) return 0; 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (unsigned)(EH_STD::rand() + EH_STD::rand()) % range; 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static EH_STD::subtractive_rng rnd; 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (range==0) return 0; 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return rnd(range); 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// default base for random container sizes 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottunsigned random_base = 1000; 40