summaryrefslogtreecommitdiffstats
path: root/src/libs/xpcom18a4/xpcom/io/nsIStringStream.idl
blob: 09a90548c135d7de249b3723837a7ef44ee7bcad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1998
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   mcmullen@netscape.com (original author)
 *   scc@mozilla.org
 *   davidm@netscape.com
 *   darin@netscape.com
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

/**
 * Based on original code from nsIStringStream.h
 */

#include "nsIInputStream.idl"

/**
 * nsIStringInputStream
 *
 * Provides scriptable and specialized C++ only methods for initializing a
 * nsIInputStream implementation with a simple character array.
 */
[scriptable, uuid(450cd2d4-f0fd-424d-b365-b1251f80fd53)]
interface nsIStringInputStream : nsIInputStream
{
    /**
     * SetData - assign data to the input stream (copied on assignment).
     *
     * @param data    - stream data
     * @param dataLen - stream data length (-1 if length should be computed)
     *
     * NOTE: C++ code should consider using AdoptData or ShareData to avoid
     * making an extra copy of the stream data.
     */
    void setData(in string data, in long dataLen);

    /**
     * NOTE: the following methods are designed to give C++ code added control
     * over the ownership and lifetime of the stream data.  Use with care :-)
     */

    /**
     * AdoptData - assign data to the input stream.  the input stream takes
     * ownership of the given data buffer and will nsMemory::Free it when
     * the input stream is destroyed.
     *
     * @param data      - stream data
     * @param dataLen   - stream data length (-1 if length should be computed)
     */
    [noscript] void adoptData(in charPtr data, in long dataLen);

    /**
     * ShareData - assign data to the input stream.  the input stream references
     * the given data buffer until the input stream is destroyed.  the given
     * data buffer must outlive the input stream.
     *
     * @param data      - stream data
     * @param dataLen   - stream data length (-1 if length should be computed)
     */
    [noscript] void shareData(in string data, in long dataLen);
};

%{C++

//-----------------------------------------------------------------------------
// C++ factory methods
//-----------------------------------------------------------------------------

#include "nsIInputStream.h"
#include "nsString.h"

#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
#define NS_NewByteInputStream VBoxNsxpNS_NewByteInputStream
#define NS_NewCStringInputStream VBoxNsxpNS_NewCStringInputStream
#define NS_NewCharInputStream VBoxNsxpNS_NewCharInputStream
#define NS_NewStringInputStream VBoxNsxpNS_NewStringInputStream
#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */

//-----------------------------------------------------------------------------
// Factory method to get an nsInputStream from an nsAString.  Result will
// implement nsIStringInputStream and nsIRandomAccessStore
extern "C" NS_COM nsresult
NS_NewStringInputStream(nsIInputStream** aStreamResult,
                        const nsAString& aStringToRead);

//-----------------------------------------------------------------------------
// Factory method to get an nsInputStream from an nsACString.  Result will
// implement nsIStringInputStream and nsIRandomAccessStore
extern "C" NS_COM nsresult
NS_NewCStringInputStream(nsIInputStream** aStreamResult,
                         const nsACString& aStringToRead);

//-----------------------------------------------------------------------------
// Factory method to get an nsInputStream from a string.  Result will
// implement nsIStringInputStream and nsIRandomAccessStore
extern "C" NS_COM nsresult
NS_NewCharInputStream(nsIInputStream** aStreamResult,
                      const char* aStringToRead);

//-----------------------------------------------------------------------------
// Factory method to get an nsInputStream from a byte buffer.  Result will
// implement nsIStringInputStream and nsIRandomAccessStore
extern "C" NS_COM nsresult
NS_NewByteInputStream(nsIInputStream** aStreamResult,
                      const char* aStringToRead,
                      PRInt32 aLength);
%}