init
[qstardict] / plugins / stardict / file.hpp
1 #ifndef _FILE_HPP_
2 #define _FILE_HPP_
3
4 #include <algorithm>
5 #include <glib.h>
6 #include <list>
7 #include <string>
8
9
10 typedef std::list<std::string> List;
11
12 template <typename Function>
13 void __for_each_file(const std::string& dirname, const std::string& suff,
14                      const List& order_list, const List& disable_list,
15                      Function f)
16 {
17     GDir *dir = g_dir_open(dirname.c_str(), 0, NULL);
18     if (dir)
19     {
20         const gchar *filename;
21
22         while ((filename = g_dir_read_name(dir)) != NULL)
23         {
24             std::string fullfilename(dirname + G_DIR_SEPARATOR_S + filename);
25             if (g_file_test(fullfilename.c_str(), G_FILE_TEST_IS_DIR))
26                 __for_each_file(fullfilename, suff, order_list, disable_list, f);
27             else if (g_str_has_suffix(filename, suff.c_str()) &&
28                      std::find(order_list.begin(), order_list.end(),
29                                fullfilename) == order_list.end())
30             {
31                 bool disable = std::find(disable_list.begin(),
32                                          disable_list.end(),
33                                          fullfilename) != disable_list.end();
34                 f(fullfilename, disable);
35             }
36         }
37         g_dir_close(dir);
38     }
39 }
40
41 template <typename Function>
42 void for_each_file(const List& dirs_list, const std::string& suff,
43                    const List& order_list, const List& disable_list,
44                    Function f)
45 {
46     List::const_iterator it;
47     for (it = order_list.begin(); it != order_list.end(); ++it)
48     {
49         bool disable = std::find(disable_list.begin(), disable_list.end(),
50                                  *it) != disable_list.end();
51         f(*it, disable);
52     }
53     for (it = dirs_list.begin(); it != dirs_list.end(); ++it)
54         __for_each_file(*it, suff, order_list, disable_list, f);
55 }
56
57 #endif//!_FILE_HPP_