170 using ElementType = ELEMENT_TYPE;
180 Ptr (
const Ptr&) =
default;
181 Ptr (
Ptr&&) noexcept = default;
182 Ptr (const shared_ptr<
IRep<ELEMENT_TYPE>>& rep);
183 template <typename ASSTREAMABLE>
184 Ptr (ASSTREAMABLE&& src)
187#if qCompilerAndStdLib_template_requires_doesnt_work_with_specialization_Buggy
188 same_as<byte, ELEMENT_TYPE> and
190 requires (ASSTREAMABLE) { src.template As<Ptr<ELEMENT_TYPE>> (); }
192#if qCompilerAndStdLib_template_requires_doesnt_work_with_specialization_Buggy
193 : inherited{src.template As<Ptr<ELEMENT_TYPE>> ()} {}
200 nonvirtual
Ptr& operator= (
Ptr&&) noexcept = default;
201 nonvirtual
Ptr& operator= (const
Ptr&) = default;
235 nonvirtual
void Close () const;
247 nonvirtual
bool IsOpen () const;
257 nonvirtual SeekOffsetType
GetOffset () const;
270 nonvirtual SeekOffsetType
Seek (SeekOffsetType offset) const;
271 nonvirtual SeekOffsetType
Seek (Whence whence, SignedSeekOffsetType offset) const;
286 nonvirtual optional<Memory::InlineBuffer<ELEMENT_TYPE>>
ReadAllAvailable () const;
321 nonvirtual optional<span<ElementType>>
Read (span<ElementType> intoBuffer, NoDataAvailableHandling blockFlag) const;
337 nonvirtual span<ElementType>
ReadBlocking (span<ElementType> intoBuffer) const;
338 nonvirtual span<ElementType>
ReadBlocking (Memory::InlineBuffer<ElementType>* intoBuffer, ElementType upToSentinel) const;
346 nonvirtual optional<span<ElementType>> ReadNonBlocking (span<ElementType> intoBuffer) const;
360 nonvirtual span<ElementType>
ReadOrThrow (span<ElementType> intoBuffer, NoDataAvailableHandling blockFlag) const;
383 nonvirtual
bool IsAtEOF () const;
384 nonvirtual optional<
bool>
IsAtEOF (NoDataAvailableHandling blockFlag) const;
400 template <typename POD_TYPE>
402 requires (same_as<ELEMENT_TYPE,
byte> and is_standard_layout_v<POD_TYPE>);
403 template <typename POD_TYPE>
404 nonvirtual span<POD_TYPE>
ReadRaw (span<POD_TYPE> intoBuffer) const
405 requires (same_as<ELEMENT_TYPE,
byte> and is_standard_layout_v<POD_TYPE>);
419 requires (same_as<ELEMENT_TYPE,
Character>);
435 requires (same_as<ELEMENT_TYPE,
Character>);
477 nonvirtual
String ReadAll (
size_t upTo = numeric_limits<
size_t>::max ()) const
478 requires (same_as<ELEMENT_TYPE,
Character>);
479 nonvirtual Memory::BLOB
ReadAll (
size_t upTo = numeric_limits<
size_t>::max ()) const
481 requires (same_as<ELEMENT_TYPE, byte>)
484 template <
typename ELEMENT_TYPE2,
size_t EXTENT2_T>
485 nonvirtual span<ElementType>
ReadAll (span<ELEMENT_TYPE2, EXTENT2_T> intoBuffer)
const
486 requires (same_as<ELEMENT_TYPE, ELEMENT_TYPE2>);
492 nonvirtual shared_ptr<IRep<ELEMENT_TYPE>>
GetSharedRep ()
const;
507 [[deprecated (
"Since Stroika v3.0d14 use ReadBlocking().value_or(0) typically")]]
Characters::Character
509 requires (same_as<ELEMENT_TYPE, Characters::Character>)
512 if (
ReadOrThrow (span{&c, 1}, blockFlag).size () == 1) [[likely]] {
517 [[deprecated (
"Since Stroika v3.0d14 Instead call ReadBlocking()to get nullopt result for EOF - or ReadOrThrow() if ever called "
518 "with eNonBlocking")]] optional<ElementType>
519 Read (NoDataAvailableHandling blockFlag = NoDataAvailableHandling::eBlockIfNoDataAvailable)
const
522 return this->
ReadOrThrow (span{&b, 1}, blockFlag).size () == 0 ? optional<ElementType>{} : b;
524 [[deprecated (
"Since Stroika v3.0d14 Consider PeekBlocking")]] optional<ElementType>
525 Peek (NoDataAvailableHandling blockFlag = NoDataAvailableHandling::eBlockIfNoDataAvailable)
const
531 auto result = this->
Read (blockFlag);
535 [[deprecated (
"Since Stroika v3.0d14 maybe")]] span<ElementType>
536 Peek (span<ElementType> intoBuffer, NoDataAvailableHandling blockFlag = NoDataAvailableHandling::eBlockIfNoDataAvailable)
const
542 auto result = this->
Read (intoBuffer, blockFlag);
546 [[deprecated (
"Since Stroika v3.0d5 use IsDataAvailableToRead ()")]] optional<size_t>
ReadNonBlocking ()
const;
547 [[deprecated (
"Since Stroika v3.0d5 use Read (span, NoDataAvailableHandling::eDontBlock )")]] optional<size_t>
549 [[deprecated (
"Since Strokka v3.0d5 deprecated since not widely used and very specific purpose and directly implementingable given "
551 GetOffsetToEndOfStream ()
const
557 Seek (eFromStart, savedReadFrom);
558 Assert (size >= savedReadFrom);
559 size -= savedReadFrom;
562 [[deprecated (
"Since Stroika v3.0d5 use span overload")]]
size_t Read (ElementType* intoStart, ElementType* intoEnd)
const
564 return Read (span{intoStart, intoEnd}).size ();
566 [[deprecated (
"Since Stroika v3.0d5 use span overload")]]
size_t Peek (ElementType* intoStart, ElementType* intoEnd)
const
568 return Peek (span{intoStart, intoEnd}).size ();
570 template <
typename POD_TYPE>
571 [[deprecated (
"Since Stroika v3.0d5 use span overload")]]
void ReadRaw (POD_TYPE* start, POD_TYPE* end)
const
572 requires (same_as<ELEMENT_TYPE, byte> and is_standard_layout_v<POD_TYPE>)
576 [[deprecated (
"Since Stroika v3.0d5 use span overload")]]
size_t ReadAll (ElementType* intoStart, ElementType* intoEnd)
const
578 return ReadAll (span{intoStart, intoEnd}).size ();