00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef RANDARRAYGENERATOR_H_
00017 #define RANDARRAYGENERATOR_H_
00018
00019 #include <cstdlib>
00020 #include <ctime>
00021 #include <string>
00022 #include <algorithm>
00023
00024 namespace test{
00025
00026 template<typename DataType> class RandArrayGenerator {
00027 public:
00028 static DataType* getRandArray(DataType* a, int n);
00029 static DataType* getRandUniqueArray(DataType* a, int n);
00030 };
00031
00032 template<typename DataType> DataType* RandArrayGenerator<DataType>::getRandArray(
00033 DataType* a, int n) {
00034 for (int i = 0; i < n; ++i) {
00035 new (a+i) DataType();
00036 }
00037 return a;
00038 }
00039
00040 template<typename DataType> DataType* RandArrayGenerator<DataType>::getRandUniqueArray(
00041 DataType* a, int n) {
00042
00043 for (int i = 0; i < n; ++i) {
00044 new (a+i) DataType();
00045 }
00046 return a;
00047 }
00048
00049 template<typename DataType> class RandArrayGenerator<DataType *> {
00050 public:
00051 static DataType** getRandArray(DataType** a, int n){
00052 srand(time(NULL));
00053 for (int i = 0; i < n; ++i) {
00054 int tmp = rand() % n;
00055 a[i] = (DataType *) tmp;
00056 }
00057 return a;
00058 }
00059
00060 static DataType** getRandUniqueArray(DataType** a, int n){
00061
00062 srand(time(NULL));
00063 for (int i = 0; i < n; ++i) {
00064 int tmp = rand() % n;
00065 a[i] = (DataType *) tmp;
00066 }
00067 return a;
00068 }
00069 };
00070
00071 template<> int* RandArrayGenerator<int>::getRandArray(int* a, int n);
00072 template<> char* RandArrayGenerator<char>::getRandArray(char* a, int n);
00073 template<> long* RandArrayGenerator<long>::getRandArray(long* a, int n);
00074 template<> double* RandArrayGenerator<double>::getRandArray(double* a, int n);
00075 template<> std::string* RandArrayGenerator<std::string>::getRandArray(
00076 std::string* a, int n);
00077 template<> int* RandArrayGenerator<int>::getRandUniqueArray(int* a, int n);
00078 template<> long* RandArrayGenerator<long>::getRandUniqueArray(long* a, int n);
00079 template<> double* RandArrayGenerator<double>::getRandUniqueArray(double* a, int n);
00080 template<> std::string* RandArrayGenerator<std::string>::getRandUniqueArray(
00081 std::string* a, int n);
00082 }
00083 #endif