diff options
Diffstat (limited to 'read_helper.h')
| -rw-r--r-- | read_helper.h | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/read_helper.h b/read_helper.h index 2256ef8..f4615d4 100644 --- a/read_helper.h +++ b/read_helper.h @@ -3,7 +3,7 @@ #define LOCKFREE_READ_HELPER_H #include <cassert> -#include <cstdio> +#include <fstream> #include <random> #include <vector> @@ -15,9 +15,8 @@ #endif #endif -// template <typename key_type> -class ReadHelper { - typedef unsigned long long key_type; +template <typename key_type> class ReadHelper_ { + // typedef unsigned long long key_type; key_type max_value = std::numeric_limits<key_type>::min(), min_value = std::numeric_limits<key_type>::max(); @@ -46,8 +45,8 @@ class ReadHelper { public: const size_t sample_length, population_length, random_number; - ReadHelper(char const *filename, size_t sample_length, - size_t population_length, size_t total_row = 0) + ReadHelper_(char const *filename, size_t sample_length, + size_t population_length, size_t total_row = 0) : filename(filename), sample_length(sample_length), population_length(population_length), random_number(genRandomRow(total_row)) { @@ -68,24 +67,24 @@ public: bool readFile() { this->population_vector.clear(); auto read_number = 0UL; - FILE *file = fopen(filename, "r"); + std::ifstream fin(filename); - if (file == nullptr) { - fprintf(stderr, "Unable to open file %s\n", filename); + if (!fin.is_open()) { return false; } P_ERR("Reading sample"); - for (key_type i; - read_number < sample_length && fscanf(file, "%lld ", &i) != EOF; - store_into_vector(i)) + for (key_type i; read_number < sample_length && !fin.eof(); + store_into_vector(i)) { + fin >> i; read_number++; + } if (random_number > 0) { P_ERR("\rReading skip"); // fprintf(stderr, "Skip %lu\n", read_number); read_number = random_number; - for (key_type i; read_number > 0 && fscanf(file, "%lld ", &i) != EOF;) + for (key_type i; read_number > 0 && !fin.eof(); fin >> i) read_number--; } @@ -93,10 +92,11 @@ public: read_number = 0; auto remain = population_length + REVERSED_BLOCK; - for (key_type i; read_number < remain && fscanf(file, "%lld ", &i) != EOF; - store_into_vector(i)) + for (key_type i; read_number < remain && !fin.eof(); store_into_vector(i)) { + fin >> i; read_number++; - fclose(file); + } + fin.close(); P_ERR("\r"); return true; } @@ -127,4 +127,6 @@ public: size_t size() const { return this->population_vector.size(); } }; +typedef ReadHelper_<unsigned long long> ReadHelper; + #endif
\ No newline at end of file |
