diff --git a/TWOPO.cpp b/TWOPO.cpp index 7189edf..a042c13 100644 --- a/TWOPO.cpp +++ b/TWOPO.cpp @@ -5,7 +5,8 @@ #include "histogram_internal.h" #include "svg.h" #include - +#include +#include using namespace std; @@ -42,15 +43,25 @@ input_data(istream& inp,bool promt) { return in; } -int main(int argc, char* argv[]) { +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; +} - curl_global_init(CURL_GLOBAL_ALL); - setlocale(LC_ALL, "Russian"); - if(argc > 1){ - CURL *curl = curl_easy_init(); +Input +download(const string& address) { + stringstream buffer; + + // TODO: заполнить буфер. + CURL *curl = curl_easy_init(); if(curl) { CURLcode res; - curl_easy_setopt(curl, CURLOPT_URL, argv[1]); + 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){ @@ -58,18 +69,26 @@ int main(int argc, char* argv[]) { exit(1); } } - return 0; - } - auto in = input_data(cin,true); + return input_data(buffer, false); +} + - auto bins = make_histogram(in.numbers, in.bin_count); +int main(int argc, char* argv[]) { - double min, max; + curl_global_init(CURL_GLOBAL_ALL); + setlocale(LC_ALL, "Russian"); + + Input input; + if(argc > 1){ + input = download(argv[1]); + } + else{ + input = input_data(cin, true); + } - double bin_size = (max - min) / in.bin_count; - //show_histogram_text(bins, bin_size); заменили на: + const auto bins = make_histogram(input.numbers, input.bin_count); show_histogram_svg(bins); return 0;