| 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 |