Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Stream.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
5namespace Stroika::Foundation::Streams {
6
7 /*
8 ********************************************************************************
9 ********************************* Ptr<ELEMENT_TYPE> ****************************
10 ********************************************************************************
11 */
12 template <typename ELEMENT_TYPE>
13 inline Ptr<ELEMENT_TYPE>::Ptr (const shared_ptr<IRep<ELEMENT_TYPE>>& rep) noexcept
14 : fRep_{(RequireExpression (rep != nullptr), rep)}
15 , fSeekable_{rep->IsSeekable ()}
16 {
17 RequireNotNull (rep);
18 }
19 template <typename ELEMENT_TYPE>
20 inline Ptr<ELEMENT_TYPE>::Ptr (nullptr_t) noexcept
21 {
22 }
23 template <typename ELEMENT_TYPE>
24 inline auto Ptr<ELEMENT_TYPE>::GetSharedRep () const -> shared_ptr<IRep<ELEMENT_TYPE>>
25 {
26 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fThisAssertExternallySynchronized};
27 return fRep_;
28 }
29 template <typename ELEMENT_TYPE>
30 inline auto Ptr<ELEMENT_TYPE>::GetRepConstRef () const -> const IRep<ELEMENT_TYPE>&
31 {
32 RequireNotNull (fRep_);
33 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fThisAssertExternallySynchronized};
34 return *fRep_.get ();
35 }
36 template <typename ELEMENT_TYPE>
37 inline auto Ptr<ELEMENT_TYPE>::GetRepRWRef () const -> IRep<ELEMENT_TYPE>&
38 {
39 RequireNotNull (fRep_);
40 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fThisAssertExternallySynchronized};
41 return *fRep_.get ();
42 }
43 template <typename ELEMENT_TYPE>
44 inline bool Ptr<ELEMENT_TYPE>::IsSeekable () const
45 {
46 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fThisAssertExternallySynchronized};
47 return fSeekable_;
48 }
49 template <typename ELEMENT_TYPE>
50 inline void Ptr<ELEMENT_TYPE>::reset () noexcept
51 {
52 Debug::AssertExternallySynchronizedMutex::WriteContext declareContext{_fThisAssertExternallySynchronized};
53 fRep_.reset ();
54 }
55 template <typename ELEMENT_TYPE>
56 inline bool Ptr<ELEMENT_TYPE>::operator== (nullptr_t) const
57 {
58 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fThisAssertExternallySynchronized};
59 return fRep_.get () == nullptr;
60 }
61 template <typename ELEMENT_TYPE>
62 inline Ptr<ELEMENT_TYPE>::operator bool () const
63 {
64 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{_fThisAssertExternallySynchronized};
65 return fRep_.get () != nullptr;
66 }
67
68}
69
71 template <>
72 constexpr EnumNames<Streams::SeekableFlag> DefaultNames<Streams::SeekableFlag>::k{{{
73 {Streams::SeekableFlag::eNotSeekable, L"Not-Seekable"},
74 {Streams::SeekableFlag::eSeekable, L"Seekable"},
75 }}};
76}
#define RequireNotNull(p)
Definition Assertions.h:347
#define RequireExpression(c)
Definition Assertions.h:267
shared_lock< const AssertExternallySynchronizedMutex > ReadContext
Instantiate AssertExternallySynchronizedMutex::ReadContext to designate an area of code where protect...
unique_lock< AssertExternallySynchronizedMutex > WriteContext
Instantiate AssertExternallySynchronizedMutex::WriteContext to designate an area of code where protec...
A Streams::Ptr<ELEMENT_TYPE> is a smart-pointer to a stream of elements of type T.
Definition Stream.h:170
nonvirtual void reset() noexcept
Definition Stream.inl:50
nonvirtual IRep< ELEMENT_TYPE > & GetRepRWRef() const
Definition Stream.inl:37
nonvirtual shared_ptr< IRep< ELEMENT_TYPE > > GetSharedRep() const
access to underlying stream smart pointer
Definition Stream.inl:24
nonvirtual bool operator==(nullptr_t) const
return true iff stream ptr is nullptr
Definition Stream.inl:56
nonvirtual const IRep< ELEMENT_TYPE > & GetRepConstRef() const
Definition Stream.inl:30
nonvirtual bool IsSeekable() const
Returns true iff this object was constructed with a seekable input stream rep.
Definition Stream.inl:44