OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library utils; | 5 library utils; |
6 | 6 |
7 import 'dart-ext:dart_archive'; | 7 import 'dart-ext:dart_archive'; |
8 import 'dart:isolate'; | 8 import 'dart:isolate'; |
9 import 'archive.dart' as archive; | 9 import 'archive.dart' as archive; |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 * [requestType] is the specific request id to send. [id] is the id of the | 26 * [requestType] is the specific request id to send. [id] is the id of the |
27 * archive; it may be null for requests that don't operate on a specific | 27 * archive; it may be null for requests that don't operate on a specific |
28 * archive. [args] are arguments that will be passed on to the extension. They | 28 * archive. [args] are arguments that will be passed on to the extension. They |
29 * should all be C-safe. | 29 * should all be C-safe. |
30 * | 30 * |
31 * Returns a future that completes with the C extension's reply. | 31 * Returns a future that completes with the C extension's reply. |
32 */ | 32 */ |
33 Future call(int requestType, [int id, List args]) { | 33 Future call(int requestType, [int id, List args]) { |
34 var fullArgs = [requestType, id]; | 34 var fullArgs = [requestType, id]; |
35 if (args != null) fullArgs.addAll(args); | 35 if (args != null) fullArgs.addAll(args); |
36 return servicePort.call(listForC(fullArgs)).transform((response) { | 36 return servicePort.call(listForC(fullArgs)).then((response) { |
37 var success = response[0]; | 37 var success = response[0]; |
38 var errno = response[1]; | 38 var errno = response[1]; |
39 var message = response[2]; | 39 var message = response[2]; |
40 | 40 |
41 if (!success) throw new ArchiveException(message, errno); | 41 if (!success) throw new ArchiveException(message, errno); |
42 return message; | 42 return message; |
43 }); | 43 }); |
44 } | 44 } |
45 | 45 |
46 /** Converts [input] to a fixed-length list which C can understand. */ | 46 /** Converts [input] to a fixed-length list which C can understand. */ |
47 List listForC(List input) { | 47 List listForC(List input) { |
48 var list = new List(input.length); | 48 var list = new List.fixedLength(input.length); |
49 list.setRange(0, input.length, input); | 49 list.setRange(0, input.length, input); |
50 return list; | 50 return list; |
51 } | 51 } |
52 | 52 |
53 /** Converts [input] to a [Uint8List] that C can process easily. */ | 53 /** Converts [input] to a [Uint8List] that C can process easily. */ |
54 Uint8List bytesForC(List<int> input) { | 54 Uint8List bytesForC(List<int> input) { |
55 var list = new Uint8List(input.length); | 55 var list = new Uint8List(input.length); |
56 list.setRange(0, input.length, input); | 56 list.setRange(0, input.length, input); |
57 return list; | 57 return list; |
58 } | 58 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 /** The error code for the error, or null. */ | 103 /** The error code for the error, or null. */ |
104 final int errno; | 104 final int errno; |
105 | 105 |
106 ArchiveException(this.message, [this.errno]); | 106 ArchiveException(this.message, [this.errno]); |
107 | 107 |
108 String toString() { | 108 String toString() { |
109 if (errno == null) return "Archive error: $message"; | 109 if (errno == null) return "Archive error: $message"; |
110 return "Archive error $errno: $message"; | 110 return "Archive error $errno: $message"; |
111 } | 111 } |
112 } | 112 } |
OLD | NEW |