Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
InternallySynchronizedOutputStream.h
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#ifndef _Stroika_Foundation_Streams_InternallySynchronizedOutputStream_h_
5#define _Stroika_Foundation_Streams_InternallySynchronizedOutputStream_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
19namespace Stroika::Foundation::Streams::InternallySynchronizedOutputStream {
20
21 using OutputStream::Ptr;
22
23 /**
24 */
25 struct DefaultOptions {
26 /**
27 * Default to using non-recursive simple mutex (so beware of one rep method calling another - if you do, override this argument to New).
28 */
29 using MutexType = mutex;
30 };
31
32 /**
33 * \par Example Usage
34 * \code
35 * Streams::OutputStream::Ptr<byte> syncStream = Streams::InternallySynchronizedOutputStream<byte>::New (otherOutputStreamToBeSharedAcrossThread);
36 * \endcode
37 *
38 * \note BASE_REP overload more efficient, and ::Ptr overload more flexible/simple to use.
39 *
40 * \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>
41 */
42 template <typename BASE_REP_TYPE, typename OPTIONS = DefaultOptions, typename... ARGS>
43 Ptr<typename BASE_REP_TYPE::ElementType> New (const OPTIONS& o = {}, ARGS&&... args);
44 template <typename ELEMENT_TYPE, typename OPTIONS = DefaultOptions>
45 Ptr<ELEMENT_TYPE> New (const OPTIONS& o, const OutputStream::Ptr<ELEMENT_TYPE>& stream2Wrap);
46
47}
48
49/*
50 ********************************************************************************
51 ***************************** Implementation Details ***************************
52 ********************************************************************************
53 */
54#include "InternallySynchronizedOutputStream.inl"
55
56#endif /*_Stroika_Foundation_Streams_InternallySynchronizedOutputStream_h_*/