Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
InternallySynchronizedInputStream.h
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#ifndef _Stroika_Foundation_Streams_InternallySynchronizedInputStream_h_
5#define _Stroika_Foundation_Streams_InternallySynchronizedInputStream_h_ 1
6
7#include "Stroika/Foundation/StroikaPreComp.h"
8
9#include <mutex>
10
12
13/*
14 * \file
15 *
16 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
17 *
18 */
19
20namespace Stroika::Foundation::Streams::InternallySynchronizedInputStream {
21
22 using InputStream::Ptr;
23
24 /**
25 */
26 struct DefaultOptions {
27 /**
28 * Default to using non-recursive simple mutex (so beware of one rep method calling another - if you do, override this argument to New).
29 */
30 using MutexType = mutex;
31 };
32
33 /**
34 * \par Example Usage
35 * \code
36 * Streams::InputStream::Ptr<byte> syncStream = Streams::InternallySynchronizedInputStream::New<byte> (otherInputStreamToBeSharedAcrossThread);
37 * \endcode
38 *
39 * \note BASE_REP overload more efficient, and ::Ptr overload more flexible/simple to use.
40 *
41 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety-For-Envelope-Letter-Internally-Synchronized">C++-Standard-Thread-Safety-For-Envelope-Letter-Internally-Synchronized</a>
42 */
43 template <typename BASE_REP_TYPE, typename OPTIONS = DefaultOptions, typename... ARGS>
44 Ptr<typename BASE_REP_TYPE::ElementType> New (const OPTIONS& o = {}, ARGS&&... args);
45 template <typename ELEMENT_TYPE, typename OPTIONS = DefaultOptions>
46 Ptr<ELEMENT_TYPE> New (const OPTIONS& o, const InputStream::Ptr<ELEMENT_TYPE>& stream2Wrap);
47
48}
49
50/*
51 ********************************************************************************
52 ***************************** Implementation Details ***************************
53 ********************************************************************************
54 */
55#include "InternallySynchronizedInputStream.inl"
56
57#endif /*_Stroika_Foundation_Streams_InternallySynchronizedInputStream_h_*/