fs/io/TextFile: split into class FileLineReader and AutoGunzipFileLineReader
Detangle dependencies.
This commit is contained in:
35
src/lib/zlib/AutoGunzipFileLineReader.cxx
Normal file
35
src/lib/zlib/AutoGunzipFileLineReader.cxx
Normal file
@@ -0,0 +1,35 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
// Copyright The Music Player Daemon Project
|
||||
|
||||
#include "AutoGunzipFileLineReader.hxx"
|
||||
#include "io/FileReader.hxx"
|
||||
#include "io/BufferedReader.hxx"
|
||||
#include "lib/zlib/AutoGunzipReader.hxx"
|
||||
#include "fs/Path.hxx"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
AutoGunzipFileLineReader::AutoGunzipFileLineReader(Path path_fs)
|
||||
:file_reader(std::make_unique<FileReader>(path_fs)),
|
||||
#ifdef ENABLE_ZLIB
|
||||
gunzip_reader(std::make_unique<AutoGunzipReader>(*file_reader)),
|
||||
#endif
|
||||
buffered_reader(std::make_unique<BufferedReader>(*
|
||||
#ifdef ENABLE_ZLIB
|
||||
gunzip_reader
|
||||
#else
|
||||
file_reader
|
||||
#endif
|
||||
))
|
||||
{
|
||||
}
|
||||
|
||||
AutoGunzipFileLineReader::~AutoGunzipFileLineReader() noexcept = default;
|
||||
|
||||
char *
|
||||
AutoGunzipFileLineReader::ReadLine()
|
||||
{
|
||||
assert(buffered_reader != nullptr);
|
||||
|
||||
return buffered_reader->ReadLine();
|
||||
}
|
||||
43
src/lib/zlib/AutoGunzipFileLineReader.hxx
Normal file
43
src/lib/zlib/AutoGunzipFileLineReader.hxx
Normal file
@@ -0,0 +1,43 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
// Copyright The Music Player Daemon Project
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifdef ENABLE_ZLIB
|
||||
|
||||
#include "io/LineReader.hxx"
|
||||
|
||||
#include <memory>
|
||||
|
||||
class Path;
|
||||
class FileReader;
|
||||
class AutoGunzipReader;
|
||||
class BufferedReader;
|
||||
|
||||
class AutoGunzipFileLineReader final : public LineReader {
|
||||
const std::unique_ptr<FileReader> file_reader;
|
||||
|
||||
const std::unique_ptr<AutoGunzipReader> gunzip_reader;
|
||||
|
||||
const std::unique_ptr<BufferedReader> buffered_reader;
|
||||
|
||||
public:
|
||||
explicit AutoGunzipFileLineReader(Path path_fs);
|
||||
|
||||
AutoGunzipFileLineReader(const AutoGunzipFileLineReader &other) = delete;
|
||||
|
||||
~AutoGunzipFileLineReader() noexcept;
|
||||
|
||||
/* virtual methods from class LineReader */
|
||||
char *ReadLine() override;
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
#include "io/FileLineReader.hxx"
|
||||
|
||||
using AutoGunzipFileLineReader = FileLineReader;
|
||||
|
||||
#endif
|
||||
@@ -10,6 +10,7 @@ zlib = static_library(
|
||||
'GunzipReader.cxx',
|
||||
'GzipOutputStream.cxx',
|
||||
'AutoGunzipReader.cxx',
|
||||
'AutoGunzipFileLineReader.cxx',
|
||||
include_directories: inc,
|
||||
dependencies: [
|
||||
zlib_dep,
|
||||
|
||||
Reference in New Issue
Block a user