diff --git a/fin_lab34.cpp b/fin_lab34.cpp index a24655f..081ca4d 100644 --- a/fin_lab34.cpp +++ b/fin_lab34.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -18,8 +19,9 @@ struct Input{ }; Input -input_data(istream &thread, bool &prompt){ +input_data(istream &thread, bool prompt){ //произошла накладка с именами переменных: при названии потока in ругается на с22, в которой якобы объявляется аргумент + prompt = false; size_t number_count; if (prompt) {cerr << "Enter the amount of numbers: " << endl;} cin >> number_count; @@ -34,23 +36,48 @@ input_data(istream &thread, bool &prompt){ return in; } +size_t +write_data(void* items, size_t item_size, size_t item_count, void* ctx) { + stringstream* buffer = reinterpret_cast(ctx); + size_t data_size = item_size * item_count; + (*buffer).write(reinterpret_cast (items), data_size); + return data_size; +} + +Input +download(const string& address){ + stringstream buffer; + CURLcode res; + CURL *curl = curl_easy_init(); + if (curl){ + curl_easy_setopt(curl, CURLOPT_URL, address.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + res = curl_easy_perform(curl); + cerr << curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, write_data); //var 8 + if (res != CURLE_OK){ + cerr << curl_easy_strerror(res); + exit(1); + } + return input_data(buffer, false); + } + curl_easy_cleanup(curl); +} + + int main(int argc, char* argv[]){ curl_global_init(CURL_GLOBAL_ALL); - CURL *curl = curl_easy_init(); - if(argc > 1) { - CURLcode res; - curl_easy_setopt(curl, CURLOPT_URL, argv[1]); - res = curl_easy_perform(curl); - curl_easy_cleanup(curl); - cerr << curl_easy_strerror(res); - exit(1); + Input input, in; + if (argc > 1) { + input = download(argv[1]); + } else { + input = input_data(cin, true); } curl_global_init(CURL_GLOBAL_ALL); //CURLcode curl_global_init(CURL_GLOBAL_ALL); size_t font = 0; - bool prompt = false; - auto in = input_data(cin, prompt); + //auto in = input_data(cin, prompt); auto bins = make_histogram(in.numbers, in.bin_count); //for (auto now: bins) {cout << now << endl;} cin >> font;