blob: d3caf885ef11f30a4902825d53b30645c385851d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include "filesystem_context.h"
namespace {
inline std::string xalanToString(const xalan::XalanDOMString& text) {
xalan::CharVectorType castHelper;
text.transcode(castHelper);
return std::string(
castHelper.begin(),
castHelper.end() - 1
);
}
}
namespace InputXSLT {
FilesystemContext::FilesystemContext(const std::string& path):
path_(canonical(boost::filesystem::path(path))) { }
boost::filesystem::path FilesystemContext::resolve(
const std::string& path) const {
return absolute(this->path_ / path);
}
boost::filesystem::path FilesystemContext::resolve(
const xalan::XalanDOMString& path) const {
return this->resolve(xalanToString(path));
}
void FilesystemContext::iterate(
const std::string& path,
std::function<void(const boost::filesystem::path&)> func
) const {
const boost::filesystem::path directory(this->resolve(path));
if ( boost::filesystem::is_directory(directory) ) {
for ( boost::filesystem::directory_iterator iter(directory);
iter != boost::filesystem::directory_iterator();
++iter ) {
if ( boost::filesystem::is_regular_file(iter->status()) ||
boost::filesystem::is_directory(iter->status()) ) {
func(*iter);
}
}
}
}
void FilesystemContext::iterate(
const xalan::XalanDOMString& path,
std::function<void(const boost::filesystem::path&)> func
) const {
this->iterate(xalanToString(path), func);
}
}
|