From 7e907e637c00071ac1da51496d2de351c6516578 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 3 Jun 2024 00:23:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B8=D0=B9=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0?= =?UTF-8?q?=D0=BD=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++++--------- svg.cpp | 23 +++++--------------- svg.h | 2 +- 3 files changed, 61 insertions(+), 29 deletions(-) diff --git a/main.cpp b/main.cpp index f9a590c..95fa242 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,8 @@ #include "text.h" #include "svg.h" #include +#include +#include using namespace std; @@ -11,7 +13,6 @@ struct Input { vector numbers; size_t bin_count{}; - vector colors; }; Input input_data(istream& inp, bool prompt) @@ -38,17 +39,50 @@ Input input_data(istream& inp, bool prompt) } inp >> in.bin_count; - in.colors.resize(in.bin_count); - cerr << "Enter colors: "; - for (size_t i = 0; i < in.bin_count; i++) + return in; +} + +size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) +{ + size_t data_size = item_count * item_size; + stringstream* buffer = reinterpret_cast(ctx); + char* item = reinterpret_cast(items); + buffer->write(item, data_size); + return data_size; +} + +Input download(const string& address) +{ + stringstream buffer; + + CURL* curl = curl_easy_init(); + + if(curl) { - inp >> in.colors[i]; + 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); + curl_easy_cleanup(curl); + if (res != 0) + { + cerr << curl_easy_strerror(res) << endl; + exit(1); + } } - return in; + + curl_easy_cleanup(curl); + + return input_data(buffer, false); } -int main(int argc, char* argv[]) + +/*int main(int argc, char* argv[]) { + curl_global_init(CURL_GLOBAL_ALL); + Input input; + if (argc > 1) { CURL* curl = curl_easy_init(); @@ -70,11 +104,22 @@ int main(int argc, char* argv[]) return 0; } - curl_global_init(CURL_GLOBAL_ALL); - auto in = input_data(cin, true); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_svg(bins, in.colors); + show_histogram_svg(bins); + + return 0; +} */ + +int main(int argc, char* argv[]) { + Input input; + if (argc > 1) { + input = download(argv[1]); + } else { + input = input_data(cin, true); + } + const auto bins = make_histogram(input.numbers, input.bin_count); + show_histogram_svg(bins); return 0; } diff --git a/svg.cpp b/svg.cpp index 1ec5992..4fb4674 100644 --- a/svg.cpp +++ b/svg.cpp @@ -22,26 +22,12 @@ void svg_text(double left, double baseline, std::string text) std::cout << ""<< text <<""; } -void svg_rect(double x, double y, double width, double height, std::string fill = "black", std::string stroke = "black") +void svg_rect(double x, double y, double width, double height, std::string fill = "purple", std::string stroke = "black") { std::cout << "\n"; } -std::string check_color(const std::string& color) -{ - if (color.find(" ") == -1 || color.find('#') == 0) - { - return color; - } - else - { - return "black"; - } -} - - - -void show_histogram_svg(const std::vector& bins, const std::vector& colors) +void show_histogram_svg(const std::vector& bins) { const auto IMAGE_WIDTH = 400; @@ -68,7 +54,7 @@ void show_histogram_svg(const std::vector& bins, const std::vector< for (std::size_t j=0; j < bins.size(); j++) { const double bin_width= MAX_ASTERISK * (static_cast(bins[j]) / maxbin); svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bins[j])); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, check_color(colors[j]), "black"); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT); top += BIN_HEIGHT; } svg_end(); @@ -77,9 +63,10 @@ void show_histogram_svg(const std::vector& bins, const std::vector< for (std::size_t j=0; j < bins.size(); j++) { const double bin_width= MAX_ASTERISK * (static_cast(bins[j]) / maxbin); svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bins[j])); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, check_color(colors[j]), "black"); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT); top += BIN_HEIGHT; } svg_end(); } } + diff --git a/svg.h b/svg.h index 92ce6c8..b29b7fd 100644 --- a/svg.h +++ b/svg.h @@ -1,5 +1,5 @@ #ifndef SVG_H_INCLUDED #define SVG_H_INCLUDED #include -void show_histogram_svg(const std::vector& bins, const std::vector& colors); +void show_histogram_svg(const std::vector& bins); #endif // SVG_H_INCLUDED