Index: frog/lib/node/node.dart |
=================================================================== |
--- frog/lib/node/node.dart (revision 3380) |
+++ frog/lib/node/node.dart (working copy) |
@@ -10,48 +10,40 @@ |
*/ |
#library('node'); |
Jennifer Messerly
2012/01/21 01:00:31
nice to see this file simplified
|
-// The sandbox needs to import the constructor functions for all the non-hidden native types we use. |
+#import('dart:coreimpl'); |
+#import('nodeimpl.dart'); |
+#import('fs.dart'); |
+var require(String module) native; |
Jennifer Messerly
2012/01/21 01:00:31
I'm thinking this should be "_require", since the
|
+ |
+// The sandbox needs to import the constructor functions for all the |
+// non-hidden native types we use. |
+ |
var createSandbox() native |
- """return {'require': require, 'process': process, 'console': console, |
+ """return { |
+ 'require': require, |
+ 'process': process, |
+ 'console': console, |
'Buffer' : Buffer, |
- 'setTimeout': setTimeout, 'clearTimeout': clearTimeout};"""; |
+ 'setTimeout': setTimeout, |
+ 'clearTimeout': clearTimeout, |
+ 'setInterval': setInterval, |
+ 'clearInterval': clearInterval, |
+ 'module' : module, |
+ 'ArrayBuffer': ArrayBuffer, |
+ 'Int8Array': Int8Array, |
+ 'Uint8Array': Uint8Array, |
+ 'Int16Array': Int16Array, |
+ 'Uint16Array': Uint16Array, |
+ 'Int32Array': Int32Array, |
+ 'Uint32Array': Uint32Array, |
+ 'Float32Array': Float32Array, |
+ 'Float64Array': Float64Array, |
+ 'DataView': DataView |
+ };"""; |
-typedef void RequestListener(ServerRequest request, ServerResponse response); |
+// global console |
-// TODO(nweiz): properly title-case these class names |
- |
-class http native "require('http')" { |
- static Server createServer(RequestListener listener) native; |
-} |
- |
-class Server native "http.Server" { |
- void listen(int port, [String hostname, Function callback]) native; |
-} |
- |
-class ServerRequest native "http.IncomingMessage" { |
- final String method; |
- final String url; |
- final Map<String, String> headers; |
- final String httpVersion; |
- |
- void setEncoding([String encoding]) {} |
-} |
- |
-class ServerResponse native "http.ServerResponse" { |
- int statusCode; |
- |
- void setHeader(String name, String value) native; |
- |
- String getHeader(String name) native; |
- |
- void removeHeader(String name) native; |
- |
- void write(String data, [String encoding = 'utf8']) native; |
- |
- void end([String data, String encoding = 'utf8']) native; |
-} |
- |
class Console native "Console" { |
// TODO(jimhug): Map node.js's ability to take multiple args to what? |
void log(String text) native; |
@@ -84,10 +76,104 @@ |
// List<EventListener> listeners(String event); |
void removeAllListeners(String event); |
void setMaxListeners(num n); |
- // TODO(jackpal): use rest arguments |
- void emit(String event, [var arg1, var arg2, var arg3]); |
} |
+typedef void StreamErrorListener(Error exception); |
+typedef void StreamCloseListener(); |
+ |
+interface CommonStream extends EventEmitter { |
+ // Error event |
+ void emitError(Error error); |
+ void addListenerError(StreamErrorListener listener); |
+ void onError(StreamErrorListener listener); |
+ void onceError(StreamErrorListener listener); |
+ void removeListenerError(StreamErrorListener listener); |
+ List<StreamErrorListener> listenersError(); |
+ |
+ // Close event |
+ void emitClose(); |
+ void addListenerClose(StreamCloseListener listener); |
+ void onClose(StreamCloseListener listener); |
+ void onceClose(StreamCloseListener listener); |
+ void removeListenerClose(StreamCloseListener listener); |
+ List<StreamCloseListener> listenersClose(); |
+ |
+ void destroy(); |
+ void destroySoon(); |
+} |
+ |
+// data is either a Buffer or a String, depending upon whether setEncoding |
+// has been called. |
+typedef void ReadableStreamDataListener(var data); |
+typedef void ReadableStreamEndListener(); |
+ |
+interface ReadableStream extends CommonStream { |
+ // Data event |
+ void emitData(var data); |
+ void addListenerData(ReadableStreamDataListener listener); |
+ void onData(ReadableStreamDataListener listener); |
+ void onceData(ReadableStreamDataListener listener); |
+ void removeListenerData(ReadableStreamDataListener listener); |
+ List<ReadableStreamDataListener> listenersData(); |
+ |
+ // End event |
+ void emitEnd(); |
+ void addListenerEnd(ReadableStreamEndListener listener); |
+ void onEnd(ReadableStreamEndListener listener); |
+ void onceEnd(ReadableStreamEndListener listener); |
+ void removeListenerEnd(ReadableStreamEndListener listener); |
+ List<ReadableStreamEndListener> listenersEnd(); |
+ |
+ bool readable; |
+ void setEncoding(String encoding); |
+ void pause(); |
+ void resume(); |
+ WritableStream pipe(WritableStream destination, [Map options]); |
+} |
+ |
+typedef void WritableStreamDrainListener(); |
+typedef void WritableStreamPipeListener(ReadableStream src); |
+ |
+interface WritableStream extends CommonStream { |
+ // Drain event |
+ void emitDrain(); |
+ void addListenerDrain(WritableStreamDrainListener listener); |
+ void onDrain(WritableStreamDrainListener listener); |
+ void onceDrain(WritableStreamDrainListener listener); |
+ void removeListenerDrain(WritableStreamDrainListener listener); |
+ List<WritableStreamDrainListener> listenersDrain(); |
+ |
+ // Pipe event |
+ void emitPipe(ReadableStream src); |
+ void addListenerPipe(WritableStreamPipeListener listener); |
+ void onPipe(WritableStreamPipeListener listener); |
+ void oncePipe(WritableStreamPipeListener listener); |
+ void removeListenerPipe(WritableStreamPipeListener listener); |
+ List<WritableStreamPipeListener> listenersPipe(); |
+ |
+ bool writable; |
+ bool write(String string, [String encoding, int fd]); |
+ bool writeBuffer(Buffer buffer); |
+ void end([String string, String encoding]); |
+ void endBuffer(Buffer buffer); |
+} |
+ |
+interface ReadWriteStream extends ReadableStream, WritableStream { |
+ // No additional methods. |
+} |
+ |
+typedef void FsStreamOpenListener(int fd); |
+ |
+interface FsStream { |
+ // Open event |
+ void emitOpen(int fd); |
+ void addListenerOpen(FsStreamOpenListener listener); |
+ void onOpen(FsStreamOpenListener listener); |
+ void onceOpen(FsStreamOpenListener listener); |
+ void removeListenerOpen(FsStreamOpenListener listener); |
+ List<FsStreamOpenListener> listenersOpen(); |
+} |
+ |
typedef void ProcessExitListener(); |
typedef void ProcessUncaughtExceptionListener(Exception err); |
typedef void ProcessSignalListener(); |
@@ -138,8 +224,6 @@ |
native "this._process.removeAllListeners(event);"; |
void setMaxListeners(num n) |
native "this._process.setMaxListeners(n);"; |
- void emit(String event, [var arg1, var arg2, var arg3]) |
- native "this._process.emit(event, arg1, arg2, arg3)"; |
// Exit event |
void emitExit() |
@@ -184,11 +268,11 @@ |
List<ProcessSignalListener> listenersSignal(String signal) |
native "return this._process.listeners(signal);"; |
- WritableStream get stdout() |
+ WriteStream get stdout() |
native "return this._process.stdout;"; |
- WritableStream get stderr() |
+ WriteStream get stderr() |
native "return this._process.stderr;"; |
- ReadableStream get stdin() |
+ ReadStream get stdin() |
native "return this._process.stdin;"; |
List<String> get argv() |
@@ -203,7 +287,9 @@ |
String cwd() |
native "return this._process.cwd();"; |
- EnvMap get env() => new EnvMap(_process); |
+ Map<String,String> get env() |
+ => new _EnvMap(_env()); |
+ var _env() native "return this._process.env;"; |
void exit([int code = 0]) |
native "this._process.exit(code);"; |
@@ -217,6 +303,9 @@ |
native "this._process.setuid(uid_or_groupname);"; |
String get version() |
native "return this._process.version;"; |
+ Map<String,String> get versions() |
+ => new _NativeMapPrimitiveValue<String>(_versions()); |
+ var _versions() native "return this._process._versions;"; |
String get installPrefix() |
native "return this._process.installPrefix;"; |
void kill(int pid, [String signal=SIGTERM]) |
@@ -225,14 +314,18 @@ |
native "return this._process.pid;"; |
String get title() |
native "return this._process.title;"; |
+ String get arch() |
+ native "return this._process.arch;"; |
String get platform() |
native "return this._process.platform;"; |
- |
- // TODO(jackpal) implement Map memoryUsage() native; |
+ MemoryUsage memoryUsage() => new MemoryUsage._from(_memoryUsage()); |
+ var _memoryUsage() native "return this._process.memoryUsage()"; |
void nextTick(Function callback) |
native "return this._process.nextTick(callback);"; |
int umask([int mask]) |
native "return this._process.umask(mask);"; |
+ int uptime() |
+ native "return this._process.uptime();"; |
} |
var get _process() |
@@ -242,347 +335,167 @@ |
return new Process(_process); |
} |
-class EnvMap { |
- var _process; |
- const EnvMap(this._process); |
- operator [](key) native "return this._process.env[key];"; |
- |
+class _EnvMap extends NativeMapPrimitiveValue<String>{ |
Jennifer Messerly
2012/01/21 01:00:31
This code does a wonderful job of working around i
|
+ _EnvMap(var env) : super(env); |
+ // process.env doesn't implement hasOwnProperty |
+ void _forEachKey(var map, void f(String key)) |
+ native """ |
+ for (var i in map) { |
+ f(i); |
+ } |
+ """; |
} |
-typedef void UtilPumpCallback(var error); |
- |
-class util native "require('util')" { |
- static void debug(String string) native; |
- static void log(String string) native; |
- static void inspect(var object, [bool showHidden=false, num depth=2]) native; |
- static pump(ReadableStream readableStream, WritableStream writeableStream, |
- [UtilPumpCallback callback]) native; |
- // the method inherits(a,b) doesn't make sense for Dart |
+class MemoryUsage { |
+ MemoryUsage._from(var mu) { |
+ rss = NativeGetIntProperty(mu, 'rss'); |
+ heapTotal = NativeGetIntProperty(mu, 'heapTotal'); |
+ heapUsed = NativeGetIntProperty(mu, 'heapUsed'); |
+ } |
+ int rss; |
+ int heapTotal; |
+ int heapUsed; |
} |
-// Object is either a Buffer or a String, depending upon whether setEncoding has been called. |
-typedef void ReadableStreamDataListener(var object); |
-typedef void ReadableStreamEndListener(); |
-typedef void ReadableStreamErrorListener(Object exception); |
-typedef void ReadableStreamCloseListener(); |
+interface TimeoutId {} |
-class ReadableStream implements EventEmitter native "*ReadStream" { |
- // EventEmitter |
- void removeAllListeners(String event) native; |
- void setMaxListeners(num n) native; |
- void emit(String event, [var arg1, var arg2, var arg3]) native; |
- |
- // Data event |
- void emitData(var data) |
- native "this.emit('data', data);"; |
- void addListenerData(ReadableStreamDataListener listener) |
- native "this.addListener('data', listener);"; |
- void onData(ReadableStreamDataListener listener) |
- native "this.on('data', listener);"; |
- void onceData(ReadableStreamDataListener listener) |
- native "this.once('data', listener);"; |
- void removeListenerData(ReadableStreamDataListener listener) |
- native "this.removeListener('data', listener);"; |
- List<ReadableStreamDataListener> listenersData() |
- native "return this._process.listeners('data');"; |
+TimeoutId setTimeout(callback(), int delay, [arg /* ... */]) native; |
+clearTimeout(TimeoutId timeoutId) native; |
- // End event |
- void emitEnd() |
- native "this.emit('end');"; |
- void addListenerEnd(ReadableStreamEndListener listener) |
- native "this.addListener('end', listener);"; |
- void onEnd(ReadableStreamEndListener listener) |
- native "this.on('end', listener);"; |
- void onceEnd(ReadableStreamEndListener listener) |
- native "this.once('end', listener);"; |
- void removeListenerEnd(ReadableStreamEndListener listener) |
- native "this.removeListener('end', listener);"; |
- List<ReadableStreamEndListener> listenersEnd() |
- native "return this._process.listeners('end');"; |
- |
- // Error event |
- void emitError(Object exception) |
- native "this.emit('error', exception);"; |
- void addListenerError(ReadableStreamErrorListener listener) |
- native "this.addListener('error', listener);"; |
- void onError(ReadableStreamErrorListener listener) |
- native "this.on('error', listener);"; |
- void onceError(ReadableStreamErrorListener listener) |
- native "this.once('error', listener);"; |
- void removeListenerError(ReadableStreamErrorListener listener) |
- native "this.removeListener('error', listener);"; |
- List<ReadableStreamErrorListener> listenersError() |
- native "return this._process.listeners('error');"; |
+interface IntervalId {} |
- // Close event |
- void emitClose() |
- native "this.emit('close');"; |
- void addListenerClose(ReadableStreamCloseListener listener) |
- native "this.addListener('close', listener);"; |
- void onClose(ReadableStreamCloseListener listener) |
- native "this.on('close', listener);"; |
- void onceClose(ReadableStreamCloseListener listener) |
- native "this.once('close', listener);"; |
- void removeListenerClose(ReadableStreamCloseListener listener) |
- native "this.removeListener('close', listener);"; |
- List<ReadableStreamCloseListener> listenersClose() |
- native "return this._process.listeners('close');"; |
- |
- bool readable; |
- void setEncoding(String encoding) native; |
- void pause() native; |
- void resume() native; |
- void destroy() native; |
- void destroySoon() native; |
- void pipe(WritableStream destination, [bool end=true]) |
- native "this.pipe(destination, {'end': end});"; |
-} |
+IntervalId setInterval(callback(), int delay, [arg /* ... */]) native; |
+clearInterval(IntervalId intervalId) native; |
-typedef void WritableStreamDrainListener(); |
-typedef void WritableStreamErrorListener(Object exception); |
-typedef void WritableStreamCloseListener(); |
-typedef void WritableStreamPipeListener(ReadableStream src); |
+// buffer |
-class WritableStream implements EventEmitter native "*WriteStream" { |
- // EventEmitter |
- void removeAllListeners(String event) native "this._writeStream.removeAllListeners(event);"; |
- void setMaxListeners(num n) native; |
- void emit(String event, [var arg1, var arg2, var arg3]) native; |
+interface Buffer extends List<int> default _BufferImplementation { |
+ Buffer(int size); |
+ Buffer.fromSize(int size); |
+ Buffer.fromList(List<int> list); |
+ Buffer.fromString(String string, [String encoding]); |
+ |
+ int write(String string, int offset, int length, [String encoding]); |
+ String toString(String encoding, int start, int end); |
- // Drain event |
- void emitDrain() |
- native "this.emit('drain');"; |
- void addListenerDrain(WritableStreamDrainListener listener) |
- native "this.addListener('drain', listener);"; |
- void onDrain(WritableStreamDrainListener listener) |
- native "this.on('drain', listener);"; |
- void onceDrain(WritableStreamDrainListener listener) |
- native "this.once('drain', listener);"; |
- void removeListenerDrain(WritableStreamDrainListener listener) |
- native "this.removeListener('drain', listener);"; |
- List<WritableStreamDrainListener> listenersDrain() |
- native "return this._process.listeners('drain');"; |
- |
- // Error event |
- void emitError(Object exception) |
- native "this.emit('error', exception);"; |
- void addListenerError(WritableStreamErrorListener listener) |
- native "this.addListener('error', listener);"; |
- void onError(WritableStreamErrorListener listener) |
- native "this.on('error', listener);"; |
- void onceError(WritableStreamErrorListener listener) |
- native "this.once('error', listener);"; |
- void removeListenerError(WritableStreamErrorListener listener) |
- native "this.removeListener('error', listener);"; |
- List<WritableStreamErrorListener> listenersError() |
- native "return this._process.listeners('error');"; |
+ void copy(Buffer targetBuffer, int targetStart, int sourceStart, int sourceEnd); |
+ Buffer slice(int start, int end); |
- // Close event |
- void emitClose() |
- native "this.emit('close');"; |
- void addListenerClose(WritableStreamCloseListener listener) |
- native "this.addListener('close', listener);"; |
- void onClose(WritableStreamCloseListener listener) |
- native "this.on('close', listener);"; |
- void onceClose(WritableStreamCloseListener listener) |
- native "this.once('close', listener);"; |
- void removeListenerClose(WritableStreamCloseListener listener) |
- native "this.removeListener('close', listener);"; |
- List<WritableStreamCloseListener> listenersClose() |
- native "return this._process.listeners('close');"; |
+ int readUInt8(int offset, [bool noAssert]); |
+ int readUInt16LE(int offset, [bool noAssert]); |
+ int readUInt16BE(int offset, [bool noAssert]); |
+ int readUInt32LE(int offset, [bool noAssert]); |
+ int readUInt32BE(int offset, [bool noAssert]); |
- // Pipe event |
- void emitPipe(ReadableStream src) |
- native "this.emit('pipe', src);"; |
- void addListenerPipe(WritableStreamPipeListener listener) |
- native "this.addListener('pipe', listener);"; |
- void onPipe(WritableStreamPipeListener listener) |
- native "this.on('pipe', listener);"; |
- void oncePipe(WritableStreamPipeListener listener) |
- native "this.once('pipe', listener);"; |
- void removeListenerPipe(WritableStreamPipeListener listener) |
- native "this.removeListener('pipe', listener);"; |
- List<WritableStreamPipeListener> listenersPipe() |
- native "return this._process.listeners('pipe');"; |
+ int readInt8(int offset, [bool noAssert]); |
+ int readInt16LE(int offset, [bool noAssert]); |
+ int readInt16BE(int offset, [bool noAssert]); |
+ int readInt32LE(int offset, [bool noAssert]); |
+ int readInt32BE(int offset, [bool noAssert]); |
- bool writable; |
- bool write(String string, [String encoding='utf8', int fd]) native; |
- bool writeBuffer(Buffer buffer) native; |
- void end([String string, String encoding='utf8']) native; |
- void endBuffer(Buffer buffer) native "this.end(buffer);"; |
- void destroy() native; |
- void destroySoon() native; |
-} |
+ double readFloatLE(int offset, [bool noAssert]); |
+ double readFloatBE(int offset, [bool noAssert]); |
+ double readDoubleLE(int offset, [bool noAssert]); |
+ double readDoubleBE(int offset, [bool noAssert]); |
-class vm native "require('vm')" { |
- static void runInThisContext(String code, [String filename]) native; |
- static void runInNewContext(String code, [var sandbox, String filename]) |
- native; |
- static Script createScript(String code, [String filename]) native; |
- static Context createContext([sandbox]) native; |
- static runInContext(String code, Context context, [String filename]) native; |
-} |
+ void writeUInt8(int value, int offset, [bool noAssert]); |
+ void writeUInt16LE(int value, int offset, [bool noAssert]); |
+ void writeUInt16BE(int value, int offset, [bool noAssert]); |
+ void writeUInt32LE(int value, int offset, [bool noAssert]); |
+ void writeUInt32BE(int value, int offset, [bool noAssert]); |
-interface Context {} |
+ void writeInt8(int value, int offset, [bool noAssert]); |
+ void writeInt16LE(int value, int offset, [bool noAssert]); |
+ void writeInt16BE(int value, int offset, [bool noAssert]); |
+ void writeInt32LE(int value, int offset, [bool noAssert]); |
+ void writeInt32BE(int value, int offset, [bool noAssert]); |
-class Script native "vm.Script" { |
- void runInThisContext() native; |
- void runInNewContext([Map sandbox]) native; |
-} |
- |
-class fs native "require('fs')" { |
- static void writeFileSync(String outfile, String text) native; |
- |
- static String readFileSync(String filename, [String encoding = 'utf8']) |
- native; |
- |
- static String realpathSync(String path) native; |
- |
- static void mkdirSync(String path, [num mode = 511 /* 0777 octal */]) native; |
- static List<String> readdirSync(String path) native; |
- static void rmdirSync(String path) native; |
- static Stats statSync(String path) native; |
- static void unlinkSync(String path) native; |
- |
- static void writeSync(int fd, String text) native; |
- static int openSync(String path, String flags, |
- [num mode = 438] /* 0666 octal */) native; |
- static void closeSync(int fd) native; |
-} |
- |
-class Stats native "fs.Stats" { |
- bool isFile() native; |
- bool isDirectory() native; |
- bool isBlockDevice() native; |
- bool isCharacterDevice() native; |
- bool isSymbolicLink() native; |
- bool isFIFO() native; |
- bool isSocket() native; |
- |
- // TODO(rnystrom): There are also the other fields we can add here if needed. |
- // See: http://nodejs.org/docs/v0.6.1/api/fs.html#fs.Stats. |
-} |
- |
-class path native "require('path')" { |
- static bool existsSync(String filename) native; |
- static String dirname(String path) native; |
- static String basename(String path) native; |
- static String extname(String path) native; |
- static String normalize(String path) native; |
- // TODO(jimhug): Get the right signatures for normalizeArray and join |
-} |
- |
-class Readline native "require('readline')" { |
- static ReadlineInterface createInterface(input, output) native; |
-} |
- |
-class ReadlineInterface native "Readline.Interface" { |
- void setPrompt(String prompt, [int length]) native; |
- void prompt() native; |
- void on(String event, Function callback) native; |
-} |
- |
-interface TimeoutId {} |
- |
-TimeoutId setTimeout(Function callback, num delay, [arg]) native; |
-clearTimeout(TimeoutId id) native; |
- |
-typedef void ChildProcessExitListener(int code, String signal); |
- |
-class ChildProcess implements EventEmitter native "ChildProcess" { |
- var _childprocess; |
+ void writeFloatLE(double value, int offset, [bool noAssert]); |
+ void writeFloatBE(double value, int offset, [bool noAssert]); |
+ void writeDoubleLE(double value, int offset, [bool noAssert]); |
+ void writeDoubleBE(double value, int offset, [bool noAssert]); |
- ChildProcess(this._childprocess); |
- |
- // EventEmitter |
- void removeAllListeners(String event) |
- native "this._childprocess.removeAllListeners(event);"; |
- void setMaxListeners(num n) |
- native "this._childprocess.setMaxListeners(n);"; |
- void emit(String event, [var arg1, var arg2, var arg3]) |
- native "this._childprocess.emit(event, arg1, arg2, arg3);"; |
- |
- // 'exit' event |
- void addListenerExit(ChildProcessExitListener listener) |
- native "this._childprocess.addListener('exit', listener);"; |
- void onExit(ChildProcessExitListener listener) |
- native "this._childprocess.on('exit', listener);"; |
- void onceExit(ChildProcessExitListener listener) |
- native "this._childprocess.once('exit', listener);"; |
- void removeListenerExit(ChildProcessExitListener listener) |
- native "this._childprocess.removeListener('exit', listener);"; |
- List<ChildProcessExitListener> listenersExit() |
- native "return this._childprocess.listeners('exit');"; |
- |
- WritableStream get stdin() |
- native "return this._childprocess.stdin;"; |
- |
- ReadableStream get stdout() |
- native "return this._childprocess.stdout;"; |
- ReadableStream get stderr() |
- native "return this._childprocess.stderr;"; |
- int get pid() |
- native "return this._childprocess.pid;"; |
+ // end defaults to buffer.length |
+ void fill(int value, int offset, int end); |
} |
-typedef void Child_processCallback(Error error, String stdout, String stderr); |
+/** Static methods that apply to all buffers */ |
-class Child_process native { |
- var _cp; |
- |
- Child_process() { |
- _cp = _get_child_process(); |
- } |
- |
- // TODOO(jackpal): translate options into a Javascript dictionary |
- ChildProcess spawn(String command, [List<String> args, |
- Map<String, Object> options]){ |
- return new ChildProcess(_spawn(_cp, command, args, options)); |
- } |
- |
- // TODOO(jackpal): translate options into a Javascript dictionary |
- ChildProcess exec(String command, Child_processCallback callback, |
- [Map<String, Object> options]) { |
- // Note the argument order to exec is different than to _exec, |
- // because Dart can't have optional arguments in the middle of |
- // an argument list. |
- return new ChildProcess(_exec(_cp, command, options, callback)); |
- } |
- |
- static var _spawn(var cp, String command, List<String> args) |
- native "return cp.spawn(command, args);"; |
- static var _exec(var cp, String command, Map<String, Object> options, |
- Child_processCallback callback) |
- native "return cp.exec(command, options, callback);"; |
- |
- static var _get_child_process() |
- native "return require('child_process');"; |
+class Buffers { |
+ static int get charsWritten() native "return Buffer._charsWritten;"; |
+ static bool isBuffer(obj) native "return Buffer.isBuffer(obj);"; |
+ static int byteLength(String string, [String encoding]) |
+ native "return Buffer.byteLength(string, encoding);"; |
+ static int get INSPECT_MAX_BYTES() native "return Buffer.INSPECT_MAX_BYTES;"; |
+ static void set INSPECT_MAX_BYTES(int v) native "Buffer.INSPECT_MAX_BYTES = v;"; |
} |
-var get child_process() { |
- return new Child_process(); |
-} |
- |
-class Buffer native "Buffer" { |
- Buffer(int size) native; |
- Buffer.fromSize(int size) |
+class _BufferImplementation implements Buffer native "Buffer" { |
+ _BufferImplementation(int size) native; |
+ _BufferImplementation.fromSize(int size) |
native "return new Buffer(size);"; |
- Buffer.fromList(List<int> list) |
+ _BufferImplementation.fromList(List<int> list) |
native "return new Buffer(list);"; |
- Buffer.fromString(String string, [String encoding='utf8']) |
+ _BufferImplementation.fromString(String string, [String encoding='utf8']) |
native "return new Buffer(string, encoding);"; |
- // the default length is buffer.length-offset |
+ |
int write(String string, int offset, int length, [String encoding='utf8']) |
native; |
static int get charsWritten() |
native "return Buffer._charsWritten;"; |
String toString(String encoding, int start, int end) native; |
+ |
+ // List<int> protocol |
int operator[](int index) native; |
int operator[]=(int index, int value) native; |
+ |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ List<int> getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ Buffer b = new Buffer(length); |
+ this.copy(b, 0, start, start + length); |
+ return b; |
+ } |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ void set length(int newLength) => _throwUnsupported(); |
+ int removeLast() {_throwUnsupported(); return 0; } |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Buffer filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Buffer(length)); |
+ Buffer map(f(int element)) |
+ => FixedLists.map(this, f, new Buffer(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ |
static bool isBuffer(obj) native; |
static int byteLength(String string, [String encoding='utf8']) native; |
- int length; |
- void copy(Buffer targetBuffer, int targetStart, int sourceStart, int sourceEnd) native; |
+ int get length() native "return this.length;"; |
+ void copy(Buffer targetBuffer, int targetStart, int sourceStart, int sourceEnd |
+ ) native; |
Buffer slice(int start, int end) native; |
int readUInt8(int offset, [bool noAssert=false]) native; |
@@ -633,4 +546,562 @@ |
bool killed; |
int code; |
String signal; |
-} |
+} |
+ |
+// TODO: module dgram |
+ |
+// TODO: module https |
+ |
+// module assert TODO: (or maybe not, isn't there a Dart assert?) |
+ |
+// Typed arrays |
+ |
+class ArrayBuffer native "ArrayBuffer" { |
+ ArrayBuffer(int length) native; |
+ int byteLength; |
+} |
+ |
+interface ArrayBufferView { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+} |
+ |
+interface TypedArrayBufferView<E> extends ArrayBufferView, List<E> { |
+ final int BYTES_PER_ELEMENT; |
+ |
+ void set(TypedArrayBufferView<E> array, [int offset]); |
+ TypedArrayBufferView<E> subarray(int begin, [int end]); |
+} |
+ |
+class Int8Array implements TypedArrayBufferView<int> native "Int8Array" { |
Jennifer Messerly
2012/01/21 01:00:31
Do the various versions all have basically the sam
|
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ final int BYTES_PER_ELEMENT; |
+ final int length; |
+ |
+ Int8Array(int length) native; |
+ factory Int8Array.fromArray(Int8Array array) native "return new Int8Array(array);"; |
+ factory Int8Array.fromList(List<int> list) native "return new Int8Array(list);"; |
+ factory Int8Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length]) |
+ native """if (byteOffset === undefined) return new Int8Array(buffer); |
+ if (length === undefined) return new Int8Array(buffer, byteOffset); |
+ return new Int8Array(buffer, byteOffset, length);"""; |
+ |
+ // List protocol |
+ int operator[](int index) native; |
+ void operator[]=(int index, int value) native; |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ Int8Array getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ return new Int8Array.fromArray(subarray(start, start+length)); |
+ } |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ int removeLast() => _throwUnsupported(); |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Int8Array filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Int8Array(length)); |
+ Int8Array map(f(int)) |
+ => FixedLists.map(this, f, new Int8Array(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ |
+ void set(Int8Array array, [int offset]) native; |
+ Int8Array subarray(int begin, [int end]) |
+ native "return end == null ? this.subarray(begin) : this.subarray(begin, end);"; |
+} |
+ |
+class Uint8Array implements TypedArrayBufferView<int> native "Uint8Array" { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ final int BYTES_PER_ELEMENT; |
+ final int length; |
+ |
+ Uint8Array(int length) native; |
+ factory Uint8Array.fromArray(Uint8Array array) native "return new Uint8Array(array);"; |
+ factory Uint8Array.fromList(List<int> list) native "return new Uint8Array(list);"; |
+ factory Uint8Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length]) |
+ native """if (byteOffset === undefined) return new Uint8Array(buffer); |
Jennifer Messerly
2012/01/21 01:00:31
this should be "byteOffset == null" which will che
|
+ if (length === undefined) return new Uint8Array(buffer, byteOffset); |
+ return new Uint8Array(buffer, byteOffset, length);"""; |
+ |
+ // List protocol |
+ int operator[](int index) native; |
+ void operator[]=(int index, int value) native; |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ Uint8Array getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ return new Uint8Array.fromArray(subarray(start, start+length)); |
+ } |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ int removeLast() => _throwUnsupported(); |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Uint8Array filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Uint8Array(length)); |
+ Uint8Array map(f(int)) |
+ => FixedLists.map(this, f, new Uint8Array(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ |
+ void set(Uint8Array array, [int offset]) native; |
+ Uint8Array subarray(int begin, [int end]) |
+ native "return end == null ? this.subarray(begin) : this.subarray(begin, end);"; |
+} |
+ |
+class Int16Array implements TypedArrayBufferView<int> native "Int16Array" { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ final int BYTES_PER_ELEMENT; |
+ final int length; |
+ |
+ Int16Array(int length) native; |
+ factory Int16Array.fromArray(Int16Array array) native "return new Int16Array(array);"; |
+ factory Int16Array.fromList(List<int> list) native "return new Int16Array(list);"; |
+ factory Int16Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length]) |
+ native """if (byteOffset === undefined) return new Int16Array(buffer); |
+ if (length === undefined) return new Int16Array(buffer, byteOffset); |
+ return new Int16Array(buffer, byteOffset, length);"""; |
+ |
+ // List protocol |
+ int operator[](int index) native; |
+ void operator[]=(int index, int value) native; |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ Int16Array getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ return new Int16Array.fromArray(subarray(start, start+length)); |
+ } |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ int removeLast() => _throwUnsupported(); |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Int16Array filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Int16Array(length)); |
+ Int16Array map(f(int)) |
+ => FixedLists.map(this, f, new Int16Array(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ |
+ void set(Int16Array array, [int offset]) native; |
+ Int16Array subarray(int begin, [int end]) |
+ native "return end == null ? this.subarray(begin) : this.subarray(begin, end);"; |
+} |
+ |
+class Uint16Array implements TypedArrayBufferView<int> native "Uint16Array" { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ final int BYTES_PER_ELEMENT; |
+ final int length; |
+ |
+ Uint16Array(int length) native; |
+ factory Uint16Array.fromArray(Uint16Array array) native "return new Uint16Array(array);"; |
+ factory Uint16Array.fromList(List<int> list) native "return new Uint16Array(list);"; |
+ factory Uint16Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length]) |
+ native """if (byteOffset === undefined) return new Uint16Array(buffer); |
+ if (length === undefined) return new Uint16Array(buffer, byteOffset); |
+ return new Uint16Array(buffer, byteOffset, length);"""; |
+ |
+ // List protocol |
+ int operator[](int index) native; |
+ void operator[]=(int index, int value) native; |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ Uint16Array getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ return new Uint16Array.fromArray(subarray(start, start+length)); |
+ } |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ int removeLast() => _throwUnsupported(); |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Uint16Array filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Uint16Array(length)); |
+ Uint16Array map(f(int)) |
+ => FixedLists.map(this, f, new Uint16Array(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ |
+ void set(Uint16Array array, [int offset]) native; |
+ Uint16Array subarray(int begin, [int end]) |
+ native "return end == null ? this.subarray(begin) : this.subarray(begin, end);"; |
+} |
+ |
+class Int32Array implements TypedArrayBufferView<int> native "Int32Array" { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ final int BYTES_PER_ELEMENT; |
+ final int length; |
+ |
+ Int32Array(int length) native; |
+ factory Int32Array.fromArray(Int32Array array) native "return new Int32Array(array);"; |
+ factory Int32Array.fromList(List<int> list) native "return new Int32Array(list);"; |
+ factory Int32Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length]) |
+ native """if (byteOffset === undefined) return new Int32Array(buffer); |
+ if (length === undefined) return new Int32Array(buffer, byteOffset); |
+ return new Int32Array(buffer, byteOffset, length);"""; |
+ |
+ // List protocol |
+ int operator[](int index) native; |
+ void operator[]=(int index, int value) native; |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ Int32Array getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ return new Int32Array.fromArray(subarray(start, start+length)); |
+ } |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ int removeLast() => _throwUnsupported(); |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Int32Array filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Int32Array(length)); |
+ Int32Array map(f(int)) |
+ => FixedLists.map(this, f, new Int32Array(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ |
+ void set(Int32Array array, [int offset]) native; |
+ Int32Array subarray(int begin, [int end]) |
+ native "return end == null ? this.subarray(begin) : this.subarray(begin, end);"; |
+} |
+ |
+class Uint32Array implements TypedArrayBufferView<int> native "Uint32Array" { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ final int BYTES_PER_ELEMENT; |
+ final int length; |
+ |
+ Uint32Array(int length) native; |
+ factory Uint32Array.fromArray(Uint32Array array) native "return new Uint32Array(array);"; |
+ factory Uint32Array.fromList(List<int> list) native "return new Uint32Array(list);"; |
+ factory Uint32Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length]) |
+ native """if (byteOffset === undefined) return new Uint32Array(buffer); |
+ if (length === undefined) return new Uint32Array(buffer, byteOffset); |
+ return new Uint32Array(buffer, byteOffset, length);"""; |
+ |
+ // List protocol |
+ int operator[](int index) native; |
+ void operator[]=(int index, int value) native; |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ Uint32Array getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ return new Uint32Array.fromArray(subarray(start, start+length)); |
+ } |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ int removeLast() => _throwUnsupported(); |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Uint32Array filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Uint32Array(length)); |
+ Uint32Array map(f(int)) |
+ => FixedLists.map(this, f, new Uint32Array(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ |
+ void set(Uint32Array array, [int offset]) native; |
+ Uint32Array subarray(int begin, [int end]) |
+ native "return end == null ? this.subarray(begin) : this.subarray(begin, end);"; |
+} |
+ |
+class Float32Array implements TypedArrayBufferView<num> native "Float32Array" { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ final int BYTES_PER_ELEMENT; |
+ final int length; |
+ |
+ Float32Array(int length) native; |
+ factory Float32Array.fromArray(Float32Array array) native "return new Float32Array(array);"; |
+ factory Float32Array.fromList(List<double> list) native "return new Float32Array(list);"; |
+ factory Float32Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length]) |
+ native """if (byteOffset === undefined) return new Float32Array(buffer); |
+ if (length === undefined) return new Float32Array(buffer, byteOffset); |
+ return new Float32Array(buffer, byteOffset, length);"""; |
+ |
+ // List protocol |
+ int operator[](int index) native; |
+ void operator[]=(int index, int value) native; |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ Float32Array getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ return new Float32Array.fromArray(subarray(start, start+length)); |
+ } |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ int removeLast() => _throwUnsupported(); |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Float32Array filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Float32Array(length)); |
+ Float32Array map(f(int)) |
+ => FixedLists.map(this, f, new Float32Array(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ |
+ void set(Float32Array array, [int offset]) native; |
+ Float32Array subarray(int begin, [int end]) |
+ native "return end == null ? this.subarray(begin) : this.subarray(begin, end);"; |
+} |
+ |
+class Float64Array implements TypedArrayBufferView<num> native "Float64Array" { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ final int BYTES_PER_ELEMENT; |
+ final int length; |
+ |
+ Float64Array(int length) native; |
+ factory Float64Array.fromArray(Float64Array array) native "return new Float64Array(array);"; |
+ factory Float64Array.fromList(List<double> list) native "return new Float64Array(list);"; |
+ factory Float64Array.fromArrayBuffer(ArrayBuffer buffer, [int byteOffset, int length]) |
+ native """if (byteOffset === undefined) return new Float64Array(buffer); |
+ if (length === undefined) return new Float64Array(buffer, byteOffset); |
+ return new Float64Array(buffer, byteOffset, length);"""; |
+ |
+ // List protocol |
+ int operator[](int index) native; |
+ void operator[]=(int index, int value) native; |
+ void _throwUnsupported() { |
+ throw new UnsupportedOperationException('not extendable'); |
+ } |
+ void add(int value) => _throwUnsupported(); |
+ void addAll(Collection<int> collection) => _throwUnsupported(); |
+ void addLast(int value) => _throwUnsupported(); |
+ void clear() => _throwUnsupported(); |
+ int indexOf(int element, [int start]) |
+ => FixedLists.indexOf(this, element, start); |
+ void insertRange(int start, int length, [int initialValue]) |
+ => _throwUnsupported(); |
+ Float64Array getRange(int start, int length) { |
+ FixedLists.getRangeCheck(this.length, start, length); |
+ return new Float64Array.fromArray(subarray(start, start+length)); |
+ } |
+ int last() |
+ => FixedLists.last(this); |
+ int lastIndexOf(int element, [int start]) |
+ => FixedLists.lastIndexOf(this, element, start); |
+ int removeLast() => _throwUnsupported(); |
+ void removeRange(int start, int length) => _throwUnsupported(); |
+ void setRange(int start, int length, List<int> from, [int startFrom]) |
+ => _throwUnsupported(); |
+ void sort(int compare(int a, int b)) |
+ => DualPivotQuicksort.sort(this, compare); |
+ |
+ // Collection<int> members: |
+ void forEach(void f(int element)) => FixedLists.forEach(this, f); |
+ Float64Array filter(bool f(int element)) |
+ => FixedLists.filter(this, f, (length) => new Float64Array(length)); |
+ Float64Array map(f(int)) |
+ => FixedLists.map(this, f, new Float64Array(this.length)); |
+ bool every(bool f(int element)) => FixedLists.every(this, f); |
+ bool some(bool f(int element)) => FixedLists.some(this, f); |
+ bool isEmpty() => FixedLists.isEmpty(this); |
+ |
+ // Iterable<int> members: |
+ Iterator<int> iterator() => new ListIterator(this); |
+ void set(Float64Array array, [int offset]) native; |
+ Float64Array subarray(int begin, [int end]) |
+ native "return end == null ? this.subarray(begin) : this.subarray(begin, end);"; |
+} |
+ |
+class DataView implements ArrayBufferView native "DataView" { |
+ final ArrayBuffer buffer; |
+ final int byteOffset; |
+ final int byteLength; |
+ |
+ DataView.fromArray(ArrayBuffer buffer, [int byteOffset, int byteLength]) |
+ native """if (byteOffset === undefined) return new DataView(buffer); |
+ if (length === undefined) return new DataView(buffer, byteOffset); |
+ return new DataView(buffer, byteOffset, length);"""; |
+ |
+ int getInt8(int byteOffset) native; |
+ int getUint8(int byteOffset) native; |
+ int getInt16(int byteOffset, [bool littleEndian=false]) native; |
+ int getUint16(int byteOffset, [bool littleEndian=false]) native; |
+ int getInt32(int byteOffset, [bool littleEndian=false]) native; |
+ int getUint32(int byteOffset, [bool littleEndian=false]) native; |
+ num getFloat32(int byteOffset, [bool littleEndian=false]) native; |
+ num getFloat64(int byteOffset, [bool littleEndian=false]) native; |
+ |
+ void setInt8(int byteOffset, int value) native; |
+ void setUint8(int byteOffset, int value) native; |
+ void setInt16(int byteOffset, int value, [bool littleEndian=false]) native; |
+ void setUint16(int byteOffset, int value, [bool littleEndian=false]) native; |
+ void setInt32(int byteOffset, int value, [bool littleEndian=false]) native; |
+ void setUint32(int byteOffset, int value, [bool littleEndian=false]) native; |
+ void setFloat32(int byteOffset, num value, [bool littleEndian=false]) native; |
+ void setFloat64(int byteOffset, num value, [bool littleEndian=false]) native; |
+} |