From e98aa14f9de782a885fbe1bbbef4ef3e68d3317b Mon Sep 17 00:00:00 2001 From: "Ilya (OgarkovIA)" Date: Sun, 27 Oct 2024 15:40:50 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=B7=D0=BA=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=81=D0=B5=D1=82=D0=B8,=20=D1=81=D0=BE=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=B2=20=D0=B1=D1=83=D1=84=D0=B5=D1=80=20?= =?UTF-8?q?=D0=B8=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 100 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 65 insertions(+), 35 deletions(-) diff --git a/main.cpp b/main.cpp index daaac3e..ae6fb02 100644 --- a/main.cpp +++ b/main.cpp @@ -1,65 +1,95 @@ #include #include -#include #include "histogram.h" #include "text.h" #include "svg.h" +#include +#include +#include using namespace std; struct Input { - vector dn; vector numbers; size_t bin_count{}; - size_t number_count{}; - size_t max_count{}; }; -Input -input_data(istream& cin, bool prompt) { - if (prompt == true){ - Input in; - cerr << "Enter number count: "; - cin >> in.number_count; - vector numbers(in.number_count); - in.numbers.resize(in.number_count); - for (size_t i = 0; i < in.number_count; i++) { - cin >> in.numbers[i]; - } - size_t bin_count; - cerr << "Enter bin count: "; - cin >> in.bin_count; +Input input_data(istream& stream, bool prompt) { - size_t max_count; - in.max_count = 0; - return in; + + size_t number_count; + if (prompt) { + cerr << "Enter number count: "; } - else{ + stream >> number_count; + Input in; - cin >> in.number_count; - vector numbers(in.number_count); - in.numbers.resize(in.number_count); - for (size_t i = 0; i < in.number_count; i++) { - cin >> in.numbers[i]; + + in.numbers.resize(number_count); + + if (prompt){ + cerr << "Enter numbers: "; + } + for (size_t i = 0; i < number_count; i++) + { + stream >> in.numbers[i]; } - size_t bin_count; - cin >> in.bin_count; - size_t max_count; - in.max_count = 0; - return in; + if (prompt){ + cerr << "Enter number of bins: "; } + stream >> in.bin_count; + + return in; +} + +size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) { // размер принятых данных в байтах, иначе curl_easy_perform() остановит работу с ошибкой. + size_t data_size = item_size * item_count; + stringstream* buffer = reinterpret_cast(ctx); // stringstream — поток, который может читать из буфера в памяти. + auto text = reinterpret_cast(items); + buffer->write(text, data_size); + return data_size; } +Input download(const string& address) { -int main(){ + stringstream buffer; curl_global_init(CURL_GLOBAL_ALL); - bool res = false; + CURL* curl = curl_easy_init(); // CURL* - дескриптор, сложный объект, передавать их функциям библиотеки и сравнивать между собой + + 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); + + if (res != CURLE_OK) { + curl_easy_strerror(res); + exit(1); + } + cerr << res << endl; + curl_easy_cleanup(curl); + } + return input_data(buffer, false); +} + + + + +int main(int argc, char* argv[]){ + + Input in; + if (argc > 1) { + in = download(argv[1]); + } else { + in = input_data(cin, true); + } - auto in = input_data(cin, true); auto bins = make_histogram(in.numbers, in.bin_count);