From 990a0e33f78b22eba2502867cb142debbd0d88ed Mon Sep 17 00:00:00 2001 From: BaranovEK Date: Wed, 5 Jun 2024 00:27:46 +0300 Subject: [PATCH] code: 3 var --- lab03.depend | 6 +++-- main.cpp | 72 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/lab03.depend b/lab03.depend index 5db1113..4c0b20b 100644 --- a/lab03.depend +++ b/lab03.depend @@ -7,13 +7,15 @@ 1716797551 c:\users\lenov\desktop\lab03\histogram.h -1717523570 source:c:\users\lenov\desktop\lab03\main.cpp +1717528384 source:c:\users\lenov\desktop\lab03\main.cpp + + + "histogram.h" "text.h" "svg.h" - 1716798974 c:\users\lenov\desktop\lab03\text.h diff --git a/main.cpp b/main.cpp index 55f090b..dad2228 100644 --- a/main.cpp +++ b/main.cpp @@ -1,22 +1,22 @@ #include #include +#include +#include +#include #include "histogram.h" #include "text.h" #include "svg.h" -#include - - - using namespace std; -struct Input { +struct Input +{ vector numbers; size_t bin_count{}; - }; -Input -input_data(istream& stream, bool prompt) { + + +Input input_data(istream& stream, bool prompt) { Input in; size_t number_count; if (prompt) { @@ -37,26 +37,48 @@ input_data(istream& stream, bool prompt) { return in; } +size_t +write_data(void* items, size_t item_size, size_t item_count, void* ctx) { + size_t data_size = item_size * item_count; + stringstream* buffer = reinterpret_cast(ctx); + (*buffer).write(reinterpret_cast(items), data_size); + return data_size; +} + +Input +download(const string& address) { + stringstream buffer; + CURL *curl = curl_easy_init(); + if(curl) { + CURLcode res; + curl_easy_setopt(curl, CURLOPT_URL, address.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + res = curl_easy_perform(curl); + + int speed; + curl_easy_getinfo(curl,CURLINFO_SPEED_DOWNLOAD_T, & speed); + cerr << "The average download speed: " << speed << " bytes/second" << endl ; + + + if (res!=CURLE_OK){ + cerr << curl_easy_strerror(res); + exit(1); + } + curl_easy_cleanup(curl); + } + return input_data(buffer, false); +} + int main(int argc, char* argv[]) { + Input input; if (argc > 1) { - CURL *curl = curl_easy_init(); - - if(curl) { - CURLcode res; - curl_easy_setopt(curl, CURLOPT_URL, argv[0]); - res = curl_easy_perform(curl); - if (res!=CURLE_OK){ - cerr << curl_easy_strerror(res); - exit(1); - } - curl_easy_cleanup(curl); - } - return 0; + input = download(argv[1]); + } else { + input = input_data(cin, true); } - Input in = input_data(cin, true); - vector bins = make_histogram(in.numbers, in.bin_count); + const auto bins = make_histogram(input.numbers, input.bin_count); show_histogram_svg(bins); - - return 0; + return 0; }