comparison dwt/browser/InputStream.d @ 348:9a4d7706df52

Test Update to fix linux XPCOM interface issues
author John Reimer <terminal.node@gmail.com>
date Fri, 31 Oct 2008 21:46:44 -0700
parents 2e591eb01162
children
comparison
equal deleted inserted replaced
347:ff6dd48f5248 348:9a4d7706df52
30 int index = 0; 30 int index = 0;
31 31
32 this (byte[] buffer) { 32 this (byte[] buffer) {
33 this.buffer = buffer; 33 this.buffer = buffer;
34 index = 0; 34 index = 0;
35 //createCOMInterfaces ();
36 } 35 }
37 36
37 extern(System)
38 nsrefcnt AddRef () { 38 nsrefcnt AddRef () {
39 refCount++; 39 refCount++;
40 return refCount; 40 return refCount;
41 } 41 }
42 /+
43 void createCOMInterfaces () {
44 /* Create each of the interfaces that this object implements */
45 inputStream = new XPCOMObject (new int[] {2, 0, 0, 0, 1, 3, 4, 1}) {
46 public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
47 public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
48 public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
49 public int /*long*/ method3 (int /*long*/[] args) {return Close ();}
50 public int /*long*/ method4 (int /*long*/[] args) {return Available (args[0]);}
51 public int /*long*/ method5 (int /*long*/[] args) {return Read (args[0], (int)/*64*/args[1], args[2]);}
52 public int /*long*/ method6 (int /*long*/[] args) {return ReadSegments (args[0], args[1], (int)/*64*/args[2], args[3]);}
53 public int /*long*/ method7 (int /*long*/[] args) {return IsNonBlocking (args[0]);}
54 };
55 }
56 42
57 void disposeCOMInterfaces () { 43 extern(System)
58 if (inputStream !is null) {
59 inputStream.dispose ();
60 inputStream = null;
61 }
62 }
63
64 int /*long*/ getAddress () {
65 return inputStream.getAddress ();
66 }
67 +/
68 nsresult QueryInterface (nsID* riid, void** ppvObject) { 44 nsresult QueryInterface (nsID* riid, void** ppvObject) {
69 if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; 45 if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE;
70 //nsID guid = new nsID (); 46 //nsID guid = new nsID ();
71 //XPCOM.memmove (guid, riid, nsID.sizeof); 47 //XPCOM.memmove (guid, riid, nsID.sizeof);
72 48
81 return XPCOM.NS_OK; 57 return XPCOM.NS_OK;
82 } 58 }
83 *ppvObject = null; 59 *ppvObject = null;
84 return XPCOM.NS_ERROR_NO_INTERFACE; 60 return XPCOM.NS_ERROR_NO_INTERFACE;
85 } 61 }
86 62
63 extern(System)
87 nsrefcnt Release () { 64 nsrefcnt Release () {
88 refCount--; 65 refCount--;
89 //if (refCount is 0) disposeCOMInterfaces (); 66 //if (refCount is 0) disposeCOMInterfaces ();
90 return refCount; 67 return refCount;
91 } 68 }
92 69
93 /* nsIInputStream implementation */ 70 /* nsIInputStream implementation */
94 71
72 extern(System)
95 nsresult Close () { 73 nsresult Close () {
96 buffer = null; 74 buffer = null;
97 index = 0; 75 index = 0;
98 return XPCOM.NS_OK; 76 return XPCOM.NS_OK;
99 } 77 }
100 78
79 extern(System)
101 nsresult Available (PRUint32* _retval) { 80 nsresult Available (PRUint32* _retval) {
102 PRUint32 available = buffer is null ? 0 : buffer.length - index; 81 PRUint32 available = buffer is null ? 0 : buffer.length - index;
103 *_retval = available; 82 *_retval = available;
104 //XPCOM.memmove (_retval, new int[] {available}, 4); 83 //XPCOM.memmove (_retval, new int[] {available}, 4);
105 return XPCOM.NS_OK; 84 return XPCOM.NS_OK;
106 } 85 }
107 86
87 extern(System)
108 nsresult Read(byte* aBuf, PRUint32 aCount, PRUint32* _retval) { 88 nsresult Read(byte* aBuf, PRUint32 aCount, PRUint32* _retval) {
109 int max = Math.min (aCount, buffer is null ? 0 : buffer.length - index); 89 int max = Math.min (aCount, buffer is null ? 0 : buffer.length - index);
110 if (aBuf is null) 90 if (aBuf is null)
111 assert(0); 91 assert(0);
112 if (max > 0) { 92 if (max > 0) {
118 } 98 }
119 *_retval = max; 99 *_retval = max;
120 return XPCOM.NS_OK; 100 return XPCOM.NS_OK;
121 } 101 }
122 102
103 extern(System)
123 nsresult ReadSegments (nsWriteSegmentFun aWriter, void* aClosure, PRUint32 aCount, PRUint32* _retval) { 104 nsresult ReadSegments (nsWriteSegmentFun aWriter, void* aClosure, PRUint32 aCount, PRUint32* _retval) {
124 int max = Math.min (aCount, buffer is null ? 0 : buffer.length - index); 105 int max = Math.min (aCount, buffer is null ? 0 : buffer.length - index);
125 PRUint32 cnt = max; 106 PRUint32 cnt = max;
126 while (cnt > 0) { 107 while (cnt > 0) {
127 PRUint32 aWriteCount; 108 PRUint32 aWriteCount;
133 //XPCOM.memmove (_retval, new int[] {max - cnt}, 4); 114 //XPCOM.memmove (_retval, new int[] {max - cnt}, 4);
134 *_retval = (max - cnt); 115 *_retval = (max - cnt);
135 return XPCOM.NS_OK; 116 return XPCOM.NS_OK;
136 } 117 }
137 118
119 extern(System)
138 nsresult IsNonBlocking (PRBool* _retval) { 120 nsresult IsNonBlocking (PRBool* _retval) {
139 /* blocking */ 121 /* blocking */
140 *_retval = 0; 122 *_retval = 0;
141 return XPCOM.NS_OK; 123 return XPCOM.NS_OK;
142 } 124 }