libzypp: zypp/PoolQueryUtil.tcc Source File

libzypp 17.25.10

PoolQueryUtil.tcc
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/PoolQueryUtil.tcc
10 *
11 * including fstream is not hell here because this header only included
12 * by implementation file, header doesn't need include it.
13 */
14 #ifndef ZYPP_POOLQUERYUTIL_TCC
15 #define ZYPP_POOLQUERYUTIL_TCC
16
17 #include <fstream>
18
19 #include <zypp/Pathname.h>
20 #include <zypp/PoolQuery.h>
21 #include <zypp/base/String.h>
22
23 namespace zypp
24 {
25
26 /**
27 * sends to output iterator all queries readed from file.
28 *
29 * \code
30 * list<PoolQuery> s;
31 * insert_iterator<list<PoolQuery> > ii(s, s.end());
32 * readPoolQueriesFromStream(f,ii);
33 * \endcode
34 */
35 template <class OutputIterator>
36 void readPoolQueriesFromFile(const zypp::filesystem::Pathname &file,
37 OutputIterator out )
38 {
39 bool found;
40 std::ifstream fin( file.c_str() );
41
42 if (!fin)
43 ZYPP_THROW(Exception(str::form("Cannot open file %s",file.c_str())));
44
45 do
46 {
47 zypp::PoolQuery q;
48 found = q.recover( fin );
49 if (found)
50 *out++ = q;
51 } while ( found );
52
53 fin.close();
54 }
55
56 /**
57 * Writes all queries from begin to end.
58 */
59
60 template <class InputIterator>
61 void writePoolQueriesToFile(const zypp::filesystem::Pathname &file,
62 InputIterator begin, InputIterator end )
63 {
64 std::ofstream fout( file.c_str(), std::ios_base::out | std::ios_base::trunc );
65
66 if (!fout)
67 ZYPP_THROW(Exception(str::form("Cannot open file %s",file.c_str())));
68
69 for_( it, begin, end )
70 {
71 it->serialize( fout );
72 }
73
74 fout.close();
75 }
76
77 }
78 #endif // ZYPP_POOLQUERYUTIL_H