Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2012-10-30 17:24:15 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:46:28 +0300
commit77564c5b7a3c2448a0fb7d46d1104a756eaeaf27 (patch)
treec2c56b396ec5e943a103bd239d0d3a8a7f734586 /platform
parentf05dcc2e4838503e9ebc204cfa1c894bda9ff46f (diff)
Make GetFilesInDir with GetFilesByExt and GetFilesByRegExp function in Platform.
Diffstat (limited to 'platform')
-rw-r--r--platform/platform.cpp25
-rw-r--r--platform/platform.hpp9
-rw-r--r--platform/platform_android.cpp12
-rw-r--r--platform/platform_ios.mm4
-rw-r--r--platform/platform_qt.cpp16
-rw-r--r--platform/platform_tests/downloader_test.cpp9
-rw-r--r--platform/platform_tests/platform_test.cpp18
-rw-r--r--platform/platform_unix_impl.cpp24
-rw-r--r--platform/platform_unix_impl.hpp4
9 files changed, 78 insertions, 43 deletions
diff --git a/platform/platform.cpp b/platform/platform.cpp
index b611a0851a..e048ea1f69 100644
--- a/platform/platform.cpp
+++ b/platform/platform.cpp
@@ -59,7 +59,7 @@ void Platform::GetFontNames(FilesList & res) const
for (size_t i = 0; i < ARRAY_SIZE(arr); ++i)
{
LOG(LDEBUG, ("Searching for fonts in", arr[i]));
- GetFilesInDir(arr[i], "*.ttf", res);
+ GetFilesByExt(arr[i], "*.ttf", res);
}
sort(res.begin(), res.end());
@@ -67,3 +67,26 @@ void Platform::GetFontNames(FilesList & res) const
LOG(LINFO, ("Available font files:", (res)));
}
+
+void Platform::GetFilesByExt(string const & directory, string const & ext, FilesList & outFiles)
+{
+ // Transform extension mask to regexp (*.mwm -> \.mwm$)
+ ASSERT ( !ext.empty(), () );
+
+ string regexp;
+ if (ext[0] == '*')
+ {
+ regexp = ext + '$';
+ regexp[0] = '\\';
+ }
+ else if (ext[0] == '.')
+ {
+ regexp = '\\' + ext + '$';
+ }
+ else
+ {
+ regexp = "\\." + ext + '$';
+ }
+
+ GetFilesByRegExp(directory, regexp, outFiles);
+}
diff --git a/platform/platform.hpp b/platform/platform.hpp
index 2cd0eeac99..f5a9b9649d 100644
--- a/platform/platform.hpp
+++ b/platform/platform.hpp
@@ -75,9 +75,12 @@ public:
typedef vector<string> FilesList;
/// Retrieves files list contained in given directory
/// @param directory directory path with slash at the end
- /// @param mask files extension to find, like ".map" etc
- /// @return number of files found in outFiles
- static void GetFilesInDir(string const & directory, string const & mask, FilesList & outFiles);
+ //@{
+ /// @param ext files extension to find, like ".mwm", "*.ttf" etc
+ static void GetFilesByExt(string const & directory, string const & ext, FilesList & outFiles);
+ static void GetFilesByRegExp(string const & directory, string const & regexp, FilesList & outFiles);
+ //@}
+
/// @return false if file is not exist
/// @note Check files in Writable dir first, and in ReadDir if not exist in Writable dir
bool GetFileSizeByName(string const & fileName, uint64_t & size) const;
diff --git a/platform/platform_android.cpp b/platform/platform_android.cpp
index 16e5ad882d..2b819c8050 100644
--- a/platform/platform_android.cpp
+++ b/platform/platform_android.cpp
@@ -1,6 +1,7 @@
#include "platform.hpp"
#include "platform_unix_impl.hpp"
#include "constants.hpp"
+#include "regexp.hpp"
#include "../coding/zip_reader.hpp"
@@ -33,7 +34,7 @@ ModelReader * Platform::GetReader(string const & file) const
}
}
-void Platform::GetFilesInDir(string const & directory, string const & mask, FilesList & res)
+void Platform::GetFilesByRegExp(string const & directory, string const & regexp, FilesList & res)
{
if (ZipFileReader::IsZip(directory))
{
@@ -41,14 +42,15 @@ void Platform::GetFilesInDir(string const & directory, string const & mask, File
FilesList fList;
ZipFileReader::FilesList(directory, fList);
- string const fixedMask = pl::GetFixedMask(mask);
+ regexp::RegExpT exp;
+ regexp::Create(regexp, exp);
for (FilesList::iterator it = fList.begin(); it != fList.end(); ++it)
{
- if (it->find(fixedMask) != string::npos)
+ if (regexp::IsExist(*it, exp))
{
// Remove assets/ prefix - clean files are needed for fonts white/blacklisting logic
- static size_t const ASSETS_LENGTH = 7;
+ size_t const ASSETS_LENGTH = 7;
if (it->find("assets/") == 0)
it->erase(0, ASSETS_LENGTH);
@@ -57,7 +59,7 @@ void Platform::GetFilesInDir(string const & directory, string const & mask, File
}
}
else
- pl::EnumerateFilesInDir(directory, mask, res);
+ pl::EnumerateFilesByRegExp(directory, regexp, res);
}
int Platform::CpuCores() const
diff --git a/platform/platform_ios.mm b/platform/platform_ios.mm
index 1fe47165f8..c9ed79f358 100644
--- a/platform/platform_ios.mm
+++ b/platform/platform_ios.mm
@@ -84,9 +84,9 @@ Platform::~Platform()
delete m_impl;
}
-void Platform::GetFilesInDir(string const & directory, string const & mask, FilesList & res)
+void Platform::GetFilesByRegExp(string const & directory, string const & regexp, FilesList & res)
{
- pl::EnumerateFilesInDir(directory, mask, res);
+ pl::EnumerateFilesByRegExp(directory, regexp, res);
}
bool Platform::GetFileSizeByName(string const & fileName, uint64_t & size) const
diff --git a/platform/platform_qt.cpp b/platform/platform_qt.cpp
index c0265141b7..22ad70de62 100644
--- a/platform/platform_qt.cpp
+++ b/platform/platform_qt.cpp
@@ -1,5 +1,6 @@
#include "platform.hpp"
#include "constants.hpp"
+#include "regexp.hpp"
#include "../coding/file_reader.hpp"
@@ -29,13 +30,20 @@ bool Platform::GetFileSizeByName(string const & fileName, uint64_t & size) const
}
}
-void Platform::GetFilesInDir(string const & directory, string const & mask, FilesList & outFiles)
+void Platform::GetFilesByRegExp(string const & directory, string const & regexp, FilesList & outFiles)
{
- QDir dir(directory.c_str(), mask.c_str(), QDir::Unsorted,
- QDir::Files | QDir::Readable | QDir::Dirs | QDir::NoDotAndDotDot);
+ regexp::RegExpT exp;
+ regexp::Create(regexp, exp);
+
+ QDir dir(QString::fromUtf8(directory.c_str()));
int const count = dir.count();
+
for (int i = 0; i < count; ++i)
- outFiles.push_back(dir[i].toUtf8().data());
+ {
+ string const name = dir[i].toUtf8().data();
+ if (regexp::IsExist(name, exp))
+ outFiles.push_back(name);
+ }
}
string Platform::DeviceName() const
diff --git a/platform/platform_tests/downloader_test.cpp b/platform/platform_tests/downloader_test.cpp
index a9a97a8431..be7b3293f8 100644
--- a/platform/platform_tests/downloader_test.cpp
+++ b/platform/platform_tests/downloader_test.cpp
@@ -372,10 +372,13 @@ namespace
{
void DeleteTempDownloadFiles()
{
- // remove data from previously failed files
+ // Remove data from previously failed files.
+
+ // Get regexp like this: (\.downloading3$|\.resume3$)
+ string const regexp = "(\\" RESUME_FILE_EXTENSION "$|\\" DOWNLOADING_FILE_EXTENSION "$)";
+
Platform::FilesList files;
- Platform::GetFilesInDir(".", "*" RESUME_FILE_EXTENSION, files);
- Platform::GetFilesInDir(".", "*" DOWNLOADING_FILE_EXTENSION, files);
+ Platform::GetFilesByRegExp(".", regexp, files);
for (Platform::FilesList::iterator it = files.begin(); it != files.end(); ++it)
FileWriter::DeleteFileX(*it);
}
diff --git a/platform/platform_tests/platform_test.cpp b/platform/platform_tests/platform_test.cpp
index 8d20467585..c94950881c 100644
--- a/platform/platform_tests/platform_test.cpp
+++ b/platform/platform_tests/platform_test.cpp
@@ -60,18 +60,22 @@ UNIT_TEST(GetReader)
TEST_EQUAL(wasException, true, ());
}
-UNIT_TEST(GetFilesInDir)
+UNIT_TEST(GetFilesInDir_Smoke)
{
Platform & pl = GetPlatform();
- Platform::FilesList files;
+ Platform::FilesList files1, files2;
- pl.GetFilesInDir(pl.WritableDir(), "*" DATA_FILE_EXTENSION, files);
- TEST_GREATER(files.size(), 0, ("/data/ folder should contain some data files"));
+ string const dir = pl.WritableDir();
- files.clear();
+ pl.GetFilesByExt(dir, "*" DATA_FILE_EXTENSION, files1);
+ TEST_GREATER(files1.size(), 0, ("/data/ folder should contain some data files"));
- pl.GetFilesInDir(pl.WritableDir(), "asdnonexistentfile.dsa", files);
- TEST_EQUAL(files.size(), 0, ());
+ pl.GetFilesByRegExp(dir, ".*\\" DATA_FILE_EXTENSION "$", files2);
+ TEST_EQUAL(files1, files2, ());
+
+ files1.clear();
+ pl.GetFilesByExt(dir, "asdnonexistentfile.dsa", files1);
+ TEST_EQUAL(files1.size(), 0, ());
}
UNIT_TEST(GetFileSize)
diff --git a/platform/platform_unix_impl.cpp b/platform/platform_unix_impl.cpp
index c1819a0eee..90132f2b9d 100644
--- a/platform/platform_unix_impl.cpp
+++ b/platform/platform_unix_impl.cpp
@@ -1,5 +1,6 @@
#include "platform.hpp"
#include "platform_unix_impl.hpp"
+#include "regexp.hpp"
#include "../base/logging.hpp"
@@ -52,31 +53,22 @@ Platform::TStorageStatus Platform::GetWritableStorageStatus(uint64_t neededSize)
namespace pl
{
-string GetFixedMask(string const & mask)
-{
- // Filter out according to the mask.
- // @TODO we don't support wildcards at the moment
- if (!mask.empty() && mask[0] == '*')
- return string(mask.c_str() + 1);
- else
- return mask;
-}
-
-void EnumerateFilesInDir(string const & directory, string const & mask, vector<string> & res)
+void EnumerateFilesByRegExp(string const & directory, string const & regexp,
+ vector<string> & res)
{
DIR * dir;
struct dirent * entry;
if ((dir = opendir(directory.c_str())) == NULL)
return;
- string const fixedMask = GetFixedMask(mask);
+ regexp::RegExpT exp;
+ regexp::Create(regexp, exp);
while ((entry = readdir(dir)) != 0)
{
- string const fname(entry->d_name);
- size_t const index = fname.rfind(fixedMask);
- if ((index != string::npos) && (index == fname.size() - fixedMask.size()))
- res.push_back(fname);
+ string const name(entry->d_name);
+ if (regexp::IsExist(name, exp))
+ res.push_back(name);
}
closedir(dir);
diff --git a/platform/platform_unix_impl.hpp b/platform/platform_unix_impl.hpp
index 0823c925c5..efca59f8cb 100644
--- a/platform/platform_unix_impl.hpp
+++ b/platform/platform_unix_impl.hpp
@@ -5,6 +5,6 @@
namespace pl
{
- string GetFixedMask(string const & mask);
- void EnumerateFilesInDir(string const & directory, string const & mask, vector<string> & res);
+ void EnumerateFilesByRegExp(string const & directory, string const & regexp,
+ vector<string> & res);
}