}
-int
-operator<(const XFile& lhs, const XFile& rhs)
-{
- return File::cmp_lt(lhs.name, rhs.name);
-}
-
-
vector<XFile>
command_get_xfiles(DBus::Connection& conn, const string& config_name, unsigned int number1,
unsigned int number2)
DBus::Hihi hihi(reply);
hihi >> files;
- sort(files.begin(), files.end());
-
return files;
}
if (fclose(fin) != 0)
SN_THROW(IOErrorException("reading pipe failed, fclose failed: " + stringerror(errno)));
- sort(files.begin(), files.end());
return files;
}
}
+ Files::Files(const FilePaths* file_paths)
+ : file_paths(file_paths)
+ {
+ }
+
+
+ Files::Files(const FilePaths* file_paths, const vector<File>& entries)
+ : file_paths(file_paths), entries(entries)
+ {
+ sort();
+ }
+
+
+ Files::~Files()
+ {
+ }
+
+
void
Files::filter(const vector<string>& ignore_patterns)
{
bool
- File::cmp_lt(const string& lhs, const string& rhs)
+ cmp_lt(const string& lhs, const string& rhs)
{
const std::collate<char>& c = std::use_facet<std::collate<char>>(std::locale());
bool
operator<(const File& lhs, const File& rhs)
{
- return File::cmp_lt(lhs.getName(), rhs.getName());
+ return cmp_lt(lhs.getName(), rhs.getName());
}
bool
operator<(const File& file, const string& name)
{
- return File::cmp_lt(file.getName(), name);
+ return cmp_lt(file.getName(), name);
}
XAUndoStatistic getXAUndoStatistic() const;
- // C++ locale aware less-than comparison
- static bool cmp_lt(const string& lhs, const string& rhs);
-
private:
bool createParentDirectories(const string& path) const;
};
+ /**
+ * Container class for files.
+ *
+ * The Files class keeps the files sorted, which is required for the find functions.
+ */
class Files
{
public:
friend class Comparison;
- Files(const FilePaths* file_paths)
- : file_paths(file_paths) {}
-
- Files(const FilePaths* file_paths, const vector<File>& entries)
- : file_paths(file_paths), entries(entries) {}
+ Files(const FilePaths* file_paths);
+ Files(const FilePaths* file_paths, const vector<File>& entries);
+ ~Files();
typedef vector<File>::iterator iterator;
typedef vector<File>::const_iterator const_iterator;
XAUndoStatistic getXAUndoStatistic() const;
- protected:
+ private:
+ /**
+ * After using push_back, sort must be called before using any find function.
+ */
void push_back(const File& file) { entries.push_back(file); }
- void filter(const vector<string>& ignore_patterns);
-
void sort();
- const FilePaths* file_paths;
+ void filter(const vector<string>& ignore_patterns);
- private:
+ const FilePaths* file_paths;
vector<File> entries;
}
}
+namespace snapper
+{
+ bool cmp_lt(const string& lhs, const string& rhs);
+}
+
BOOST_AUTO_TEST_CASE(test1)
{
std::locale::global(std::locale("C"));
vector<string> v = { "A", "B", "b", "a" };
- sort(v.begin(), v.end(), File::cmp_lt);
+ sort(v.begin(), v.end(), cmp_lt);
BOOST_CHECK_EQUAL(v, vector<string>({ "A", "B", "a", "b" }));
}
std::locale::global(std::locale("en_US.UTF-8"));
vector<string> v = { "A", "B", "b", "a" };
- sort(v.begin(), v.end(), File::cmp_lt);
+ sort(v.begin(), v.end(), cmp_lt);
BOOST_CHECK_EQUAL(v, vector<string>({ "a", "A", "b", "B" }));
}
std::locale::global(std::locale("de_DE.UTF-8"));
vector<string> v = { "a", "b", "ä" };
- sort(v.begin(), v.end(), File::cmp_lt);
+ sort(v.begin(), v.end(), cmp_lt);
BOOST_CHECK_EQUAL(v, vector<string>({ "a", "ä", "b" }));
}
std::locale::global(std::locale("en_US.UTF-8"));
vector<string> v = { "a", "\344" }; // invalid UTF-8
- sort(v.begin(), v.end(), File::cmp_lt);
+ sort(v.begin(), v.end(), cmp_lt);
BOOST_CHECK_EQUAL(v, vector<string>({ "\344", "a" }));
}