1 //------------------------------------------------------------------------
2 // Project     : VST SDK
3 //
4 // Category    : Helpers
5 // Filename    : public.sdk/source/vst/auwrapper/NSDataIBStream.h
6 // Created by  : Steinberg, 12/2007
7 // Description : VST 3 -> AU Wrapper
8 //
9 //-----------------------------------------------------------------------------
10 // LICENSE
11 // (c) 2020, Steinberg Media Technologies GmbH, All Rights Reserved
12 //-----------------------------------------------------------------------------
13 // Redistribution and use in source and binary forms, with or without modification,
14 // are permitted provided that the following conditions are met:
15 //
16 //   * Redistributions of source code must retain the above copyright notice,
17 //     this list of conditions and the following disclaimer.
18 //   * Redistributions in binary form must reproduce the above copyright notice,
19 //     this list of conditions and the following disclaimer in the documentation
20 //     and/or other materials provided with the distribution.
21 //   * Neither the name of the Steinberg Media Technologies nor the names of its
22 //     contributors may be used to endorse or promote products derived from this
23 //     software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
26 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28 // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
29 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
32 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33 // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  OF THIS SOFTWARE, EVEN IF ADVISED
34 // OF THE POSSIBILITY OF SUCH DAMAGE.
35 //-----------------------------------------------------------------------------
36 
37 /// \cond ignore
38 
39 #pragma once
40 
41 #import <Foundation/Foundation.h>
42 #import "pluginterfaces/base/ibstream.h"
43 #import "public.sdk/source/vst/hosting/hostclasses.h"
44 
45 //------------------------------------------------------------------------
46 namespace Steinberg {
47 namespace Vst {
48 
49 //------------------------------------------------------------------------
50 class NSDataIBStream : public IBStream, Vst::IStreamAttributes
51 {
52 public:
53 	NSDataIBStream (NSData* data, bool hideAttributes = false);
54 	virtual ~NSDataIBStream ();
55 
56 	//---from IBStream-------------------
57 	tresult PLUGIN_API read  (void* buffer, int32 numBytes, int32* numBytesRead = 0) SMTG_OVERRIDE;
58 	tresult PLUGIN_API write (void* buffer, int32 numBytes, int32* numBytesWritten = 0) SMTG_OVERRIDE;
59 	tresult PLUGIN_API seek  (int64 pos, int32 mode, int64* result = 0) SMTG_OVERRIDE;
60 	tresult PLUGIN_API tell  (int64* pos) SMTG_OVERRIDE;
61 
62 	//---from Vst::IStreamAttributes-----
63 	tresult PLUGIN_API getFileName (String128 name) SMTG_OVERRIDE;
64 	IAttributeList* PLUGIN_API getAttributes () SMTG_OVERRIDE;
65 
66 	//------------------------------------------------------------------------
67 	DECLARE_FUNKNOWN_METHODS
68 protected:
69 	NSData* data;
70 	int64 currentPos;
71 	HostAttributeList attrList;
72 	bool hideAttributes;
73 };
74 
75 //------------------------------------------------------------------------
76 class NSMutableDataIBStream : public NSDataIBStream
77 {
78 public:
79 	NSMutableDataIBStream (NSMutableData* data);
80 	virtual ~NSMutableDataIBStream ();
81 
82 	tresult PLUGIN_API write (void* buffer, int32 numBytes, int32* numBytesWritten = 0) SMTG_OVERRIDE;
83 //------------------------------------------------------------------------
84 protected:
85 	NSMutableData* mdata;
86 };
87 
88 //------------------------------------------------------------------------
89 } // namespace Vst
90 } // namespace Steinberg
91 
92 /// \endcond
93