23 class input :
public boost::equality_comparable<input>,
private boost::noncopyable
59 [[nodiscard]] std::size_t
length()
const;
66 [[nodiscard]] std::unique_ptr<input>
clone()
const;
87 void append(std::unique_ptr<input>&& p_another);
98 [[nodiscard]]
bool is()
const
100 return dynamic_cast<const C*
>(
this);
110 template <
typename C>
111 [[nodiscard]]
const C&
as()
const
114 return static_cast<const C&
>(*this);
124 template <
typename C>
125 [[nodiscard]] C&
as()
128 return static_cast<C&
>(*this);
135 virtual bool equal_to_impl(
const input& another)
const = 0;
137 virtual std::size_t hash_value_impl()
const = 0;
139 virtual std::size_t length_impl()
const = 0;
141 virtual std::unique_ptr<input> clone_impl()
const = 0;
143 virtual std::unique_ptr<input> create_subrange_impl(std::size_t offset, std::size_t
length)
const = 0;
145 virtual void append_impl(std::unique_ptr<input>&& p_another) = 0;