libzypp 17.37.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
23namespace 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 = false;
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