Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Stats CalculateStats(const KeyWords& key_words, vector<string>::iterator begin_range, vector<string>::iterator end_range) {
- Stats stats_one_string;
- for (vector<string>::iterator it_all_string = begin_range; it_all_string != end_range; ++it_all_string) {
- vector<string_view> words = SplitIntoWords(*it_all_string);
- for (vector<string_view>::iterator it = words.begin(); it != words.end(); ++it) {
- if (key_words.count(*it)) {
- stats_one_string.word_frequences[string(*it)]++;
- }
- }
- }
- return stats_one_string;
- }
- Stats ExploreKeyWords(const KeyWords& key_words, istream& input) {
- Stats statistics;
- vector<string> content;
- while (!input.eof()) {
- string text;
- getline(input, text);
- if (text.empty()) {
- break;
- }
- if (!CheckPrintSymbols(text)) {
- return statistics;
- }
- content.push_back(move(text));
- }
- vector<string>::iterator begin_range = content.begin();
- vector<string>::iterator end_range = content.end();
- const size_t distance = content.end() - content.begin();
- const size_t part_length = max(1, static_cast<int>(distance) / 3);
- vector<string>::iterator middle_left = begin_range + part_length;
- vector<string>::iterator middle_right = end_range - part_length;
- future<Stats> first_part = async([&key_words, begin_range, middle_left] {
- return CalculateStats(key_words, begin_range, middle_left); });
- future<Stats> second_part = async([&key_words, middle_left, middle_right] {
- return CalculateStats(key_words, middle_left, middle_right); });
- statistics += CalculateStats(key_words, middle_right, end_range);
- statistics += first_part.get();
- statistics += second_part.get();
- return statistics;
- }
Advertisement
Add Comment
Please, Sign In to add comment