From e51796eb12561ccf5877cfaf7e75db039ad6a970 Mon Sep 17 00:00:00 2001
From: MachulinaDV <MachulinaDV>
Date: Sat, 3 Jun 2023 22:22:45 +0300
Subject: [PATCH] =?UTF-8?q?code:=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?=
 =?UTF-8?q?=D1=81=20=D0=B1=D1=83=D1=84=D0=B5=D1=80=D0=BE=D0=BC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 main.cpp | 55 +++++++++++++++++++++++++++++++++++--------------------
 1 file changed, 35 insertions(+), 20 deletions(-)

diff --git a/main.cpp b/main.cpp
index 31bef32..0d57581 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,6 +1,8 @@
 #include <iostream>
 #include <vector>
 #include <math.h>
+#include <sstream>
+#include <string>
 #include <stdlib.h>
 #include <stdio.h>
 #include <curl/curl.h>
@@ -15,8 +17,15 @@ using namespace std;
     size_t bin{};
     };
 
-Input
-input_data(istream& tin, bool promt)
+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<stringstream*>(ctx);
+    buffer->write(reinterpret_cast<const char*>(items), data_size);
+    return data_size;
+}
+
+Input input_data(istream& tin, bool promt)
 {
     size_t n;
     if (promt)
@@ -37,30 +46,36 @@ input_data(istream& tin, bool promt)
     return in;
 }
 
-int main(int argc, char* argv[])
+Input download(const string& address)
 {
-
-    if (argc > 1)
+    stringstream buffer;
+    CURL* curl = curl_easy_init();
+    if(curl)
     {
-        CURL* curl = curl_easy_init();
-        if(curl)
+        CURLcode res;
+        curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
+        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
+        res = curl_easy_perform(curl);
+        if (res != 0)
         {
-            CURLcode res;
-            curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
-            res = curl_easy_perform(curl);
-            if (res != 0)
-            {
-                cout << curl_easy_strerror(res);
-                exit(1);
-            }
-
+            cout << curl_easy_strerror(res);
+            exit(1);
         }
-        return 0;
     }
-    curl_global_init(CURL_GLOBAL_ALL);
-    auto in = input_data(cin, false);
+    curl_easy_cleanup(curl);
+    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+    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 B = make_histogram(in.A, in.bin);
-    show_histogram_svg (B);
+    show_histogram_svg(B);
 
     system("pause");
     return 0;