remove file module, move code to utils

This commit is contained in:
Evgeniy Dushistov
2013-07-07 19:52:02 +00:00
parent e39f7eed9a
commit d05de97521
7 changed files with 46 additions and 57 deletions

View File

@@ -49,8 +49,6 @@ set(sdcv_SRCS
src/distance.cpp src/distance.cpp
src/distance.hpp src/distance.hpp
src/mapfile.hpp src/mapfile.hpp
src/file.hpp
src/file.cpp
) )
if (ENABLE_NLS) if (ENABLE_NLS)

View File

@@ -1,43 +0,0 @@
#include <algorithm>
#include <glib.h>
#include "file.hpp"
static void __for_each_file(const std::string& dirname, const std::string& suff,
const std::list<std::string>& order_list, const std::list<std::string>& disable_list,
const std::function<void (const std::string&, bool)>& f)
{
GDir *dir = g_dir_open(dirname.c_str(), 0, nullptr);
if (dir) {
const gchar *filename;
while ((filename = g_dir_read_name(dir))!=nullptr) {
const std::string fullfilename(dirname+G_DIR_SEPARATOR_S+filename);
if (g_file_test(fullfilename.c_str(), G_FILE_TEST_IS_DIR))
__for_each_file(fullfilename, suff, order_list, disable_list, f);
else if (g_str_has_suffix(filename, suff.c_str()) &&
std::find(order_list.begin(), order_list.end(),
fullfilename)==order_list.end()) {
const bool disable = std::find(disable_list.begin(),
disable_list.end(),
fullfilename)!=disable_list.end();
f(fullfilename, disable);
}
}
g_dir_close(dir);
}
}
void for_each_file(const std::list<std::string>& dirs_list, const std::string& suff,
const std::list<std::string>& order_list, const std::list<std::string>& disable_list,
const std::function<void (const std::string&, bool)>& f)
{
for (const std::string & item : order_list) {
const bool disable = std::find(disable_list.begin(), disable_list.end(), item) != disable_list.end();
f(item, disable);
}
for (const std::string& item : dirs_list)
__for_each_file(item, suff, order_list, disable_list, f);
}

View File

@@ -1,10 +0,0 @@
#pragma once
#include <list>
#include <string>
#include <functional>
extern void for_each_file(const std::list<std::string>& dirs_list, const std::string& suff,
const std::list<std::string>& order_list, const std::list<std::string>& disable_list,
const std::function<void (const std::string&, bool)>& f);

View File

@@ -3,7 +3,6 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "file.hpp"
#include "stardict_lib.hpp" #include "stardict_lib.hpp"
#include "readline.hpp" #include "readline.hpp"

View File

@@ -11,8 +11,8 @@
#include <glib/gstdio.h> #include <glib/gstdio.h>
#include "distance.hpp" #include "distance.hpp"
#include "file.hpp"
#include "mapfile.hpp" #include "mapfile.hpp"
#include "utils.hpp"
#include "stardict_lib.hpp" #include "stardict_lib.hpp"

View File

@@ -26,6 +26,7 @@
#include <glib/gi18n.h> #include <glib/gi18n.h>
#include <cstdlib> #include <cstdlib>
#include <cstdio> #include <cstdio>
#include <algorithm>
#include "utils.hpp" #include "utils.hpp"
@@ -67,3 +68,41 @@ char *locale_to_utf8(const char *loc_str)
return str; return str;
} }
static void __for_each_file(const std::string& dirname, const std::string& suff,
const std::list<std::string>& order_list, const std::list<std::string>& disable_list,
const std::function<void (const std::string&, bool)>& f)
{
GDir *dir = g_dir_open(dirname.c_str(), 0, nullptr);
if (dir) {
const gchar *filename;
while ((filename = g_dir_read_name(dir))!=nullptr) {
const std::string fullfilename(dirname+G_DIR_SEPARATOR_S+filename);
if (g_file_test(fullfilename.c_str(), G_FILE_TEST_IS_DIR))
__for_each_file(fullfilename, suff, order_list, disable_list, f);
else if (g_str_has_suffix(filename, suff.c_str()) &&
std::find(order_list.begin(), order_list.end(),
fullfilename)==order_list.end()) {
const bool disable = std::find(disable_list.begin(),
disable_list.end(),
fullfilename)!=disable_list.end();
f(fullfilename, disable);
}
}
g_dir_close(dir);
}
}
void for_each_file(const std::list<std::string>& dirs_list, const std::string& suff,
const std::list<std::string>& order_list, const std::list<std::string>& disable_list,
const std::function<void (const std::string&, bool)>& f)
{
for (const std::string & item : order_list) {
const bool disable = std::find(disable_list.begin(), disable_list.end(), item) != disable_list.end();
f(item, disable);
}
for (const std::string& item : dirs_list)
__for_each_file(item, suff, order_list, disable_list, f);
}

View File

@@ -2,6 +2,8 @@
#include <glib.h> #include <glib.h>
#include <string> #include <string>
#include <list>
#include <functional>
template <typename T, typename unref_res_t, void (*unref_res)(unref_res_t *)> template <typename T, typename unref_res_t, void (*unref_res)(unref_res_t *)>
class ResourceWrapper { class ResourceWrapper {
@@ -57,3 +59,7 @@ namespace glib {
extern char *locale_to_utf8(const char *locstr); extern char *locale_to_utf8(const char *locstr);
extern std::string utf8_to_locale_ign_err(const std::string& utf8_str); extern std::string utf8_to_locale_ign_err(const std::string& utf8_str);
extern void for_each_file(const std::list<std::string>& dirs_list, const std::string& suff,
const std::list<std::string>& order_list, const std::list<std::string>& disable_list,
const std::function<void (const std::string&, bool)>& f);