// -*- C++ -*- // Copyright (C) 2005-2019 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the terms // of the GNU General Public License as published by the Free Software // Foundation; either version 3, or (at your option) any later // version. // This library is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // You should have received a copy of the GNU General Public License // along with this library; see the file COPYING3. If not see // . // Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. // Permission to use, copy, modify, sell, and distribute this software // is hereby granted without fee, provided that the above copyright // notice appears in all copies, and that both that copyright notice // and this permission notice appear in supporting documentation. None // of the above authors, nor IBM Haifa Research Laboratories, make any // representation about the suitability of this software for any // purpose. It is provided "as is" without express or implied // warranty. /** * @file text_populate.hpp * Contains a function for populating a vector with text words from * a file. */ #ifndef PB_DS_TEXT_POPULATE_HPP #define PB_DS_TEXT_POPULATE_HPP #include #include #include #include #include namespace __gnu_pbds { namespace test { template void text_populate(const std::string& r_f_name, Vec& r_a_txt) { const size_t size = r_a_txt.size(); try { std::ifstream f(r_f_name.c_str()); if (!f.good()) { std::cerr << "Cannot open file " << r_f_name.c_str() << std::endl; throw __gnu_pbds::test::illegal_input_error(); } size_t i = 0; while (f.good()&& i < size) { f >> r_a_txt[i].first; r_a_txt[i].second = 0; ++i; } if (i < size) { std::cerr << "Read only " << static_cast(i) << " words" << std::endl; throw __gnu_pbds::test::illegal_input_error(); } } catch(...) { std::cerr << "Error reading from file" << std::endl; throw; } } template void distinct_text_populate(const std::string& r_f_name, Vec& r_a_txt) { const size_t size = r_a_txt.size(); try { std::ifstream f(r_f_name.c_str()); if (!f.good()) { std::cerr << "Cannot open file " << r_f_name.c_str() << std::endl; throw __gnu_pbds::test::illegal_input_error(); } typedef std::set< typename Vec::value_type::first_type> set_t; set_t s; while (f.good()&& s.size() < size) { typename Vec::value_type::first_type v; f >> v; if (s.find(v) == s.end()) { r_a_txt[s.size()] = std::make_pair(v, 0); s.insert(v); } } if (s.size() < size) { std::cerr << "Read only " << static_cast(s.size()) << " words" << std::endl; throw __gnu_pbds::test::illegal_input_error(); } } catch(...) { std::cerr << "Error reading from file" << std::endl; throw; } } } // namespace test } // namespace __gnu_pbds #endif // #ifndef PB_DS_TEXT_POPULATE_HPP