On x86 compilers without fastcall, simulate it when invoking traces and un-simulate...
[wine-gecko.git] / xpcom / io / nsIFastLoadService.idl
blobdbde0bad8889eca164f5424740d965b87548ab02
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
13 * License.
15 * The Original Code is Mozilla FastLoad code.
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 2001
20 * the Initial Developer. All Rights Reserved.
22 * Contributor(s):
23 * Brendan Eich <brendan@mozilla.org> (original author)
25 * Alternatively, the contents of this file may be used under the terms of
26 * either of the GNU General Public License Version 2 or later (the "GPL"),
27 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28 * in which case the provisions of the GPL or the LGPL are applicable instead
29 * of those above. If you wish to allow use of your version of this file only
30 * under the terms of either the GPL or the LGPL, and not to allow others to
31 * use your version of this file under the terms of the MPL, indicate your
32 * decision by deleting the provisions above and replace them with the notice
33 * and other provisions required by the GPL or the LGPL. If you do not delete
34 * the provisions above, a recipient may use your version of this file under
35 * the terms of any one of the MPL, the GPL or the LGPL.
37 * ***** END LICENSE BLOCK ***** */
39 #include "nsISupports.idl"
40 #include "nsrootidl.idl"
42 interface nsIFastLoadReadControl;
43 interface nsIFile;
44 interface nsIInputStream;
45 interface nsIOutputStream;
46 interface nsIObjectInputStream;
47 interface nsIObjectOutputStream;
49 [scriptable, uuid(715577db-d9c5-464a-a32e-0a40c29b22d4)]
50 interface nsIFastLoadFileIO : nsISupports
52 readonly attribute nsIInputStream inputStream;
53 readonly attribute nsIOutputStream outputStream;
56 [scriptable, uuid(759e475e-0c23-4dbf-b1b8-78c9369e3072)]
57 interface nsIFastLoadService : nsISupports
59 nsIFile newFastLoadFile(in string aBaseName);
61 nsIObjectInputStream newInputStream(in nsIInputStream aSrcStream);
62 nsIObjectOutputStream newOutputStream(in nsIOutputStream aDestStream);
64 // Flag values for the direction attribute and the aDirectionFlags
65 // parameter to startMuxedDocument.
66 const PRInt32 NS_FASTLOAD_READ = 1;
67 const PRInt32 NS_FASTLOAD_WRITE = 2;
69 attribute nsIObjectInputStream inputStream;
70 attribute nsIObjectOutputStream outputStream;
71 attribute nsIFastLoadFileIO fileIO;
72 readonly attribute PRInt32 direction;
74 /**
75 * These methods associate a URI object with its spec, for faster select
76 * using the object pointer as a key, rather than the spec string. The
77 * selectMuxedDocument method returns the previously selected URI object,
78 * in case a caller needs to reselect the previous after muxing data for
79 * a given URI synchronously. For the non-blocking or "asynchronous" i/o
80 * case, the caller must select the source URI from the FastLoad multiplex
81 * before writing a new burst of data parsed from the slow-loaded source.
83 * Clients of inputStream and outputStream should try to demultiplex data
84 * from the input stream only if fastLoadService->StartMuxedDocument(uri,
85 * urispec, NS_FASTLOAD_READ) succeeds. If StartMuxedDocument fails with
86 * NS_ERROR_NOT_AVAILABLE, callers should slow-load the documents, muxing
87 * their data to the current output stream.
89 void startMuxedDocument(in nsISupports aURI,
90 in string aURISpec,
91 in PRInt32 aDirectionFlags);
92 nsISupports selectMuxedDocument(in nsISupports aURI);
93 void endMuxedDocument(in nsISupports aURI);
95 void addDependency(in nsIFile aFile);
97 PRUint32 computeChecksum(in nsIFile aFile,
98 in nsIFastLoadReadControl aControl);
99 void cacheChecksum(in nsIFile aFile,
100 in nsIObjectOutputStream aStream);
102 [noscript] void getFastLoadReferent(inout nsISupports aPtr);
104 [noscript] void readFastLoadPtr(in nsIObjectInputStream aInputStream,
105 inout nsISupports aPtr);
107 [noscript] void writeFastLoadPtr(in nsIObjectOutputStream aOutputStream,
108 in nsISupports aPtr);
111 * Return true if aURISpec identifies a muxed document in the FastLoad
112 * file, false otherwise.
114 boolean hasMuxedDocument(in string aURISpec);
117 %{C++
118 #define NS_FASTLOADSERVICE_CLASSNAME "Mozilla FastLoad Service"
120 #define NS_FASTLOADSERVICE_CID \
121 {0xc943093c,0xac94,0x4bee,{0x84,0x0b,0x8b,0x5a,0x6e,0x31,0x4f,0xa7}}
123 #define NS_FASTLOADSERVICE_CONTRACTID \
124 "@mozilla.org/fast-load-service;1"
126 #ifndef nsCOMPtr_h___
127 # include "nsCOMPtr.h"
128 #endif
129 #ifndef __gen_nsIFile_h__
130 # include "nsIFile.h"
131 #endif
132 #ifndef nsIServiceManager_h___
133 # include "nsIServiceManager.h"
134 #endif
136 inline const nsGetServiceByContractID
137 do_GetFastLoadService()
139 return nsGetServiceByContractID(NS_FASTLOADSERVICE_CONTRACTID);
142 inline const nsGetServiceByContractIDWithError
143 do_GetFastLoadService(nsresult *aResultCode)
145 return nsGetServiceByContractIDWithError(NS_FASTLOADSERVICE_CONTRACTID,
146 aResultCode);
149 inline nsresult
150 NS_AddFastLoadDependency(nsIFile* aFile)
152 nsCOMPtr<nsIFastLoadService> fastLoadService(do_GetFastLoadService());
153 if (fastLoadService) {
154 nsresult rv = fastLoadService->AddDependency(aFile);
155 if (NS_FAILED(rv) && rv != NS_ERROR_NOT_AVAILABLE)
156 return rv;
158 return NS_OK;
161 #if defined(XP_UNIX) || defined(XP_BEOS)
162 #define PLATFORM_FASL_SUFFIX ".mfasl"
163 #elif defined(XP_WIN) || defined(XP_OS2)
164 #define PLATFORM_FASL_SUFFIX ".mfl"
165 #endif