| 63 | } |
| 64 | |
| 65 | void RandString(MemPool* pool, StringValue* result, |
| 66 | const StringValue& min, const StringValue& max, double r, |
| 67 | variate_generator<minstd_rand&, uniform_real<>>& rand) { |
| 68 | int min_len = min.Len(); |
| 69 | int max_len = max.Len(); |
| 70 | int len = r * (max_len - min_len) + min_len; |
| 71 | char* ptr = reinterpret_cast<char*>(pool->Allocate(len)); |
| 72 | result->Assign(ptr, len); |
| 73 | |
| 74 | for (int i = 0; i < len; ++i) { |
| 75 | int min_char = i < min_len ? min.Ptr()[i] : 'a'; |
| 76 | int max_char = (i < max_len ? max.Ptr()[i] : 'z') + 1; |
| 77 | ptr[i] = rand() * (max_char - min_char) + min_char; |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | void* DataProvider::NextBatch(int* rows_returned) { |
| 82 | int num_rows = min(batch_size_, num_rows_ - rows_returned_); |