1 #ifndef OSMIUM_IO_COMPRESSION_HPP
2 #define OSMIUM_IO_COMPRESSION_HPP
42 #include <system_error>
51 #include <osmium/io/detail/read_write.hpp>
68 virtual void write(
const std::string& data) = 0;
70 virtual void close() = 0;
91 virtual std::string
read() = 0;
115 typedef std::map<const osmium::io::file_compression, std::tuple<create_compressor_type, create_decompressor_type_fd, create_decompressor_type_buffer>>
compression_map_type;
128 std::string error_message {
"Support for compression '"};
130 error_message +=
"' not compiled into this binary.";
131 throw std::runtime_error(error_message);
144 create_decompressor_type_fd create_decompressor_fd,
145 create_decompressor_type_buffer create_decompressor_buffer) {
147 compression_map_type::value_type cc(compression, std::make_tuple(create_compressor, create_decompressor_fd, create_decompressor_buffer));
148 return m_callbacks.insert(cc).second;
152 auto it = m_callbacks.find(compression);
154 if (it != m_callbacks.end()) {
155 return std::unique_ptr<osmium::io::Compressor>(std::get<0>(it->second)(fd));
162 auto it = m_callbacks.find(compression);
164 if (it != m_callbacks.end()) {
165 return std::unique_ptr<osmium::io::Decompressor>(std::get<1>(it->second)(fd));
172 auto it = m_callbacks.find(compression);
174 if (it != m_callbacks.end()) {
175 return std::unique_ptr<osmium::io::Decompressor>(std::get<2>(it->second)(buffer, size));
198 void write(
const std::string& data)
override final {
199 osmium::io::detail::reliable_write(m_fd, data.data(), data.size());
230 m_buffer_size(size) {
237 std::string
read() override final {
241 if (m_buffer_size != 0) {
244 buffer.append(m_buffer, size);
250 throw std::system_error(errno, std::system_category(),
"Read failed");
252 buffer.resize(nread);
271 #pragma GCC diagnostic push
272 #pragma GCC diagnostic ignored "-Wunused-variable"
278 #pragma GCC diagnostic pop
286 #endif // OSMIUM_IO_COMPRESSION_HPP
OSMIUM_NORETURN void error(osmium::io::file_compression compression)
Definition: compression.hpp:127
#define OSMIUM_NORETURN
Definition: compatibility.hpp:44
NoDecompressor(int fd)
Definition: compression.hpp:219
virtual std::string read()=0
Decompressor & operator=(const Decompressor &)=delete
static CompressionFactory & instance()
Definition: compression.hpp:136
virtual ~Decompressor()
Definition: compression.hpp:88
static constexpr unsigned int input_buffer_size
Definition: compression.hpp:78
void close() overridefinal
Definition: compression.hpp:202
Definition: compression.hpp:74
~NoDecompressor() overridefinal
Definition: compression.hpp:233
CompressionFactory()=default
virtual void write(const std::string &data)=0
void write(const std::string &data) overridefinal
Definition: compression.hpp:198
int m_fd
Definition: compression.hpp:213
const char * as_string(file_compression compression)
Definition: file_compression.hpp:51
size_t m_buffer_size
Definition: compression.hpp:215
Namespace for everything in the Osmium library.
Definition: assembler.hpp:55
~NoCompressor() overridefinal
Definition: compression.hpp:194
std::unique_ptr< osmium::io::Decompressor > create_decompressor(osmium::io::file_compression compression, int fd)
Definition: compression.hpp:161
std::string read() overridefinal
Definition: compression.hpp:237
std::unique_ptr< osmium::io::Decompressor > create_decompressor(osmium::io::file_compression compression, const char *buffer, size_t size)
Definition: compression.hpp:171
std::function< osmium::io::Compressor *(int)> create_compressor_type
Definition: compression.hpp:109
std::map< const osmium::io::file_compression, std::tuple< create_compressor_type, create_decompressor_type_fd, create_decompressor_type_buffer > > compression_map_type
Definition: compression.hpp:115
NoCompressor(int fd)
Definition: compression.hpp:189
virtual ~Compressor()
Definition: compression.hpp:65
std::function< osmium::io::Decompressor *(int)> create_decompressor_type_fd
Definition: compression.hpp:110
file_compression
Definition: file_compression.hpp:42
std::function< osmium::io::Decompressor *(const char *, size_t)> create_decompressor_type_buffer
Definition: compression.hpp:111
Definition: compression.hpp:183
void close() overridefinal
Definition: compression.hpp:258
Definition: compression.hpp:59
int m_fd
Definition: compression.hpp:185
compression_map_type m_callbacks
Definition: compression.hpp:117
CompressionFactory & operator=(const CompressionFactory &)=delete
Definition: compression.hpp:211
virtual void close()
Definition: compression.hpp:93
Definition: compression.hpp:105
NoDecompressor(const char *buffer, size_t size)
Definition: compression.hpp:226
bool register_compression(osmium::io::file_compression compression, create_compressor_type create_compressor, create_decompressor_type_fd create_decompressor_fd, create_decompressor_type_buffer create_decompressor_buffer)
Definition: compression.hpp:141
const char * m_buffer
Definition: compression.hpp:214
std::unique_ptr< osmium::io::Compressor > create_compressor(osmium::io::file_compression compression, int fd)
Definition: compression.hpp:151