#include namespace DB { ReadBufferFromFileDecorator::ReadBufferFromFileDecorator(std::unique_ptr impl_) : ReadBufferFromFileDecorator(std::move(impl_), "") { } ReadBufferFromFileDecorator::ReadBufferFromFileDecorator(std::unique_ptr impl_, const String & file_name_) : impl(std::move(impl_)), file_name(file_name_) { swap(*impl); } std::string ReadBufferFromFileDecorator::getFileName() const { if (!file_name.empty()) return file_name; if (ReadBufferFromFileBase * buffer = dynamic_cast(impl.get())) return buffer->getFileName(); return std::string(); } off_t ReadBufferFromFileDecorator::getPosition() { swap(*impl); auto position = impl->getPosition(); swap(*impl); return position; } off_t ReadBufferFromFileDecorator::seek(off_t off, int whence) { swap(*impl); auto result = impl->seek(off, whence); swap(*impl); return result; } bool ReadBufferFromFileDecorator::nextImpl() { swap(*impl); auto result = impl->next(); swap(*impl); return result; } }