Skip to content

Commit 805c392

Browse files
Modify StreamReaderDataContext to accept the deserializer as a template parameter to prepare for adding another IR stream reader. (#28)
Co-authored-by: kirkrodrigues <[email protected]>
1 parent 8e3b660 commit 805c392

File tree

3 files changed

+19
-23
lines changed

3 files changed

+19
-23
lines changed

src/clp_ffi_js/ir/StreamReaderDataContext.hpp

+11-15
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,26 @@
55
#include <utility>
66

77
#include <clp/Array.hpp>
8-
#include <clp/ir/LogEventDeserializer.hpp>
9-
#include <clp/ir/types.hpp>
10-
#include <clp/streaming_compression/zstd/Decompressor.hpp>
8+
#include <clp/ReaderInterface.hpp>
119

1210
namespace clp_ffi_js::ir {
1311
/**
1412
* The data context for a `StreamReader`. It encapsulates a chain of the following resources:
15-
* A `clp::ir::LogEventDeserializer` that reads from a
16-
* `clp::streaming_compression::zstd::Decompressor`, which in turn reads from a `clp::Array`.
17-
* @tparam encoded_variable_t Type of encoded variables encoded in the stream.
13+
* An IR deserializer class that reads from a `clp::ReaderInterface`, which in turn reads from a
14+
* `clp::Array`.
15+
* @tparam Deserializer Type of deserializer.
1816
*/
19-
template <typename encoded_variable_t>
17+
template <typename Deserializer>
2018
class StreamReaderDataContext {
2119
public:
2220
// Constructors
2321
StreamReaderDataContext(
2422
clp::Array<char>&& data_buffer,
25-
std::unique_ptr<clp::streaming_compression::zstd::Decompressor>&& zstd_decompressor,
26-
clp::ir::LogEventDeserializer<clp::ir::four_byte_encoded_variable_t> deserializer
23+
std::unique_ptr<clp::ReaderInterface>&& reader,
24+
Deserializer deserializer
2725
)
2826
: m_data_buffer{std::move(data_buffer)},
29-
m_zstd_decompressor{std::move(zstd_decompressor)},
27+
m_reader{std::move(reader)},
3028
m_deserializer{std::move(deserializer)} {}
3129

3230
// Disable copy constructor and assignment operator
@@ -44,14 +42,12 @@ class StreamReaderDataContext {
4442
/**
4543
* @return A reference to the deserializer.
4644
*/
47-
[[nodiscard]] auto get_deserializer() -> clp::ir::LogEventDeserializer<encoded_variable_t>& {
48-
return m_deserializer;
49-
}
45+
[[nodiscard]] auto get_deserializer() -> Deserializer& { return m_deserializer; }
5046

5147
private:
5248
clp::Array<char> m_data_buffer;
53-
std::unique_ptr<clp::streaming_compression::zstd::Decompressor> m_zstd_decompressor;
54-
clp::ir::LogEventDeserializer<encoded_variable_t> m_deserializer;
49+
std::unique_ptr<clp::ReaderInterface> m_reader;
50+
Deserializer m_deserializer;
5551
};
5652
} // namespace clp_ffi_js::ir
5753

src/clp_ffi_js/ir/UnstructuredIrStreamReader.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ auto UnstructuredIrStreamReader::create(
3939
std::unique_ptr<ZstdDecompressor>&& zstd_decompressor,
4040
clp::Array<char> data_array
4141
) -> UnstructuredIrStreamReader {
42-
auto result{
43-
clp::ir::LogEventDeserializer<four_byte_encoded_variable_t>::create(*zstd_decompressor)
44-
};
42+
auto result{UnstructuredIrDeserializer::create(*zstd_decompressor)};
4543
if (result.has_error()) {
4644
auto const error_code{result.error()};
4745
throw ClpFfiJsException{
@@ -55,7 +53,7 @@ auto UnstructuredIrStreamReader::create(
5553
)
5654
};
5755
}
58-
auto data_context = StreamReaderDataContext<four_byte_encoded_variable_t>(
56+
auto data_context = StreamReaderDataContext<UnstructuredIrDeserializer>(
5957
std::move(data_array),
6058
std::move(zstd_decompressor),
6159
std::move(result.value())
@@ -218,10 +216,10 @@ auto UnstructuredIrStreamReader::decode_range(size_t begin_idx, size_t end_idx,
218216
}
219217

220218
UnstructuredIrStreamReader::UnstructuredIrStreamReader(
221-
StreamReaderDataContext<four_byte_encoded_variable_t>&& stream_reader_data_context
219+
StreamReaderDataContext<UnstructuredIrDeserializer>&& stream_reader_data_context
222220
)
223221
: m_stream_reader_data_context{std::make_unique<
224-
StreamReaderDataContext<four_byte_encoded_variable_t>>(
222+
StreamReaderDataContext<UnstructuredIrDeserializer>>(
225223
std::move(stream_reader_data_context)
226224
)},
227225
m_ts_pattern{m_stream_reader_data_context->get_deserializer().get_timestamp_pattern()} {}

src/clp_ffi_js/ir/UnstructuredIrStreamReader.hpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <optional>
88
#include <vector>
99

10+
#include <clp/ir/LogEventDeserializer.hpp>
1011
#include <clp/ir/types.hpp>
1112
#include <clp/TimestampPattern.hpp>
1213
#include <emscripten/val.h>
@@ -17,6 +18,7 @@
1718

1819
namespace clp_ffi_js::ir {
1920
using clp::ir::four_byte_encoded_variable_t;
21+
using UnstructuredIrDeserializer = clp::ir::LogEventDeserializer<four_byte_encoded_variable_t>;
2022

2123
/**
2224
* Mapping between an index in the filtered log events collection to an index in the unfiltered
@@ -75,12 +77,12 @@ class UnstructuredIrStreamReader : public StreamReader {
7577
private:
7678
// Constructor
7779
explicit UnstructuredIrStreamReader(
78-
StreamReaderDataContext<four_byte_encoded_variable_t>&& stream_reader_data_context
80+
StreamReaderDataContext<UnstructuredIrDeserializer>&& stream_reader_data_context
7981
);
8082

8183
// Variables
8284
std::vector<LogEventWithLevel<four_byte_encoded_variable_t>> m_encoded_log_events;
83-
std::unique_ptr<StreamReaderDataContext<four_byte_encoded_variable_t>>
85+
std::unique_ptr<StreamReaderDataContext<UnstructuredIrDeserializer>>
8486
m_stream_reader_data_context;
8587
FilteredLogEventsMap m_filtered_log_event_map;
8688
clp::TimestampPattern m_ts_pattern;

0 commit comments

Comments
 (0)