45 explicit image_header_extractor(T&& value) : wrapper_{std::make_shared<wrapper<T>>(std::forward<T>(value))} {}
52 return wrapper_->hint();
60 [[nodiscard]] std::optional<image_general_header>
get(std::istream& stream)
const {
61 return wrapper_->get(stream);
69 [[nodiscard]] std::optional<image_general_header>
get(std::span<const std::byte> buffer)
const {
70 return wrapper_->get(buffer);
75 virtual ~base() =
default;
77 virtual std::optional<image_general_header> get(std::istream& stream) = 0;
78 virtual std::optional<image_general_header> get(std::span<const std::byte> buffer) = 0;
82 class wrapper final :
public base {
84 template <std::convertible_to<T> U>
85 explicit wrapper(U&& value) : value_{std::forward<U>(value)} {}
91 std::optional<image_general_header> get(std::istream& stream)
override {
92 return value_.get(stream);
95 std::optional<image_general_header> get(std::span<const std::byte> buffer)
override {
96 return value_.get(buffer);
103 std::shared_ptr<base> wrapper_;