1 #ifndef OSMIUM_IO_FILE_HPP
2 #define OSMIUM_IO_FILE_HPP
56 inline std::vector<std::string> split(
const std::string& in,
const char delim) {
57 std::vector<std::string> result;
58 std::stringstream ss(in);
60 while (std::getline(ss, item, delim)) {
61 result.push_back(item);
116 std::string protocol = m_filename.substr(0, m_filename.find_first_of(
':'));
117 if (protocol ==
"http" || protocol ==
"https") {
168 std::vector<std::string> options = detail::split(format,
',');
172 if (!options.empty() && options[0].find_first_of(
'=') == std::string::npos) {
174 options.erase(options.begin());
177 for (
auto& option : options) {
178 size_t pos = option.find_first_of(
'=');
179 if (pos == std::string::npos) {
182 std::string value = option.substr(pos+1);
188 if (
get(
"history") ==
"true") {
190 }
else if (
get(
"history") ==
"false") {
196 std::vector<std::string> suffixes = detail::split(name,
'.');
198 if (suffixes.empty())
return;
202 if (suffixes.back() ==
"gz") {
205 }
else if (suffixes.back() ==
"bz2") {
210 if (suffixes.empty())
return;
214 if (suffixes.back() ==
"pbf") {
217 }
else if (suffixes.back() ==
"xml") {
220 }
else if (suffixes.back() ==
"opl") {
225 if (suffixes.empty())
return;
227 if (suffixes.back() ==
"osm") {
230 }
else if (suffixes.back() ==
"osh") {
234 }
else if (suffixes.back() ==
"osc") {
237 set(
"xml_change_format",
true);
250 std::string msg =
"Could not detect file format";
251 if (!m_format_string.empty()) {
252 msg +=
" from format string '";
256 if (m_filename.empty()) {
257 msg +=
" for stdin/stdout";
259 msg +=
" for filename '";
264 throw std::runtime_error(msg);
326 if (filename ==
"-") {
344 #endif // OSMIUM_IO_FILE_HPP
File & set_has_multiple_object_versions(bool value) noexcept
Definition: file.hpp:320
void parse_format(const std::string &format)
Definition: file.hpp:167
File(const char *buffer, size_t size, const std::string &format="")
Definition: file.hpp:137
void default_settings_for_url()
Definition: file.hpp:293
bool has_multiple_object_versions() const noexcept
Definition: file.hpp:316
void default_settings_for_stdinout()
Definition: file.hpp:273
File(const std::string &filename="", const std::string &format="")
Definition: file.hpp:102
void detect_format_from_suffix(const std::string &name)
Definition: file.hpp:195
size_t buffer_size() const noexcept
Definition: file.hpp:163
bool m_has_multiple_object_versions
Definition: file.hpp:88
Definition: options.hpp:53
Namespace for everything in the Osmium library.
Definition: assembler.hpp:55
file_compression m_file_compression
Definition: file.hpp:86
File & set_compression(file_compression compression) noexcept
Definition: file.hpp:311
std::string m_format_string
Definition: file.hpp:82
file_format format() const noexcept
Definition: file.hpp:298
file_compression
Definition: file_compression.hpp:42
File & set_format(file_format format) noexcept
Definition: file.hpp:302
void default_settings_for_file()
Definition: file.hpp:283
file_format
Definition: file_format.hpp:42
const char * buffer() const noexcept
Definition: file.hpp:159
File & operator=(const File &)=default
file_format m_file_format
Definition: file.hpp:84
size_t size() const noexcept
Definition: options.hpp:121
std::string m_filename
Definition: file.hpp:77
file_compression compression() const noexcept
Definition: file.hpp:307
void check() const
Definition: file.hpp:248
size_t m_buffer_size
Definition: file.hpp:80
File & filename(const std::string &filename)
Definition: file.hpp:325
const std::string & filename() const noexcept
Definition: file.hpp:334
void set(const std::string &key, const std::string &value)
Definition: options.hpp:78
const char * m_buffer
Definition: file.hpp:79