diff options
Diffstat (limited to 'sax/src/sax_processor_builder.cc')
| -rw-r--r-- | sax/src/sax_processor_builder.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/sax/src/sax_processor_builder.cc b/sax/src/sax_processor_builder.cc new file mode 100644 index 0000000..8817099 --- /dev/null +++ b/sax/src/sax_processor_builder.cc @@ -0,0 +1,62 @@ +#include "sax_processor_builder.hh" + +#include "processor.hh" +#include "sax_processor.hh" + +#include <optional> +#include <utility> + +namespace modxml { +namespace sax { + +namespace { + +class ProcessorBuilderImpl : public ProcessorBuilder { + public: + ProcessorBuilder* force_encoding(std::string const& str) override { + force_encoding_ = str; + return this; + } + + ProcessorBuilder* custom_decoder_factory( + std::shared_ptr<DecoderFactory> custom_decoder_factory) override { + decoder_factory_ = std::move(custom_decoder_factory); + return this; + } + + ProcessorBuilder* set_default_buffer_size(std::size_t size) override { + default_buffer_size_ = size; + return this; + } + + ProcessorBuilder* set_max_buffer_size(std::size_t size) override { + max_buffer_size_ = size; + return this; + } + + std::unique_ptr<Processor> build( + std::shared_ptr<Delegate> delegate) const override { + return create_processor(std::move(delegate), + decoder_factory_, + force_encoding_, + default_buffer_size_, + max_buffer_size_); + } + + ProcessorBuilderImpl() = default; + + private: + std::shared_ptr<DecoderFactory> decoder_factory_; + std::optional<std::string> force_encoding_; + std::optional<std::size_t> default_buffer_size_; + std::optional<std::size_t> max_buffer_size_; +}; + +} // namespace + +std::unique_ptr<ProcessorBuilder> ProcessorBuilder::create() { + return std::make_unique<ProcessorBuilderImpl>(); +} + +} // namespace sax +} // namespace modxml |
