| Index: mojo/public/dart/src/buffer.dart
|
| diff --git a/mojo/public/dart/src/buffer.dart b/mojo/public/dart/src/buffer.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a00838e466dc4db5721855dc3785b2a9110cfe8b
|
| --- /dev/null
|
| +++ b/mojo/public/dart/src/buffer.dart
|
| @@ -0,0 +1,107 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +part of core;
|
| +
|
| +class _MojoSharedBufferNatives {
|
| + static List Create(int num_bytes, int flags)
|
| + native "MojoSharedBuffer_Create";
|
| +
|
| + static List Duplicate(int buffer_handle, int flags)
|
| + native "MojoSharedBuffer_Duplicate";
|
| +
|
| + static List Map(int buffer_handle, int offset, int num_bytes, int flags)
|
| + native "MojoSharedBuffer_Map";
|
| +
|
| + static int Unmap(ByteData buffer)
|
| + native "MojoSharedBuffer_Unmap";
|
| +}
|
| +
|
| +
|
| +class MojoSharedBuffer {
|
| + static const int CREATE_FLAG_NONE = 0;
|
| + static const int DUPLICATE_FLAG_NONE = 0;
|
| + static const int MAP_FLAG_NONE = 0;
|
| +
|
| + RawMojoHandle handle;
|
| + MojoResult status;
|
| + ByteData mapping;
|
| +
|
| + MojoSharedBuffer._() {
|
| + handle = null;
|
| + status = MojoResult.OK;
|
| + mapping = null;
|
| + }
|
| +
|
| + factory MojoSharedBuffer(int num_bytes, [int flags = 0]) {
|
| + List result = _MojoSharedBufferNatives.Create(num_bytes, flags);
|
| + if (result == null) {
|
| + return null;
|
| + }
|
| + assert((result is List) && (result.length == 2));
|
| + var r = new MojoResult(result[0]);
|
| + if (!r.isOk) {
|
| + return null;
|
| + }
|
| +
|
| + MojoSharedBuffer buf = new MojoSharedBuffer._();
|
| + buf.status = r;
|
| + buf.handle = new RawMojoHandle(result[1]);
|
| + buf.mapping = null;
|
| + return buf;
|
| + }
|
| +
|
| + factory MojoSharedBuffer.duplicate(MojoSharedBuffer msb, [int flags = 0]) {
|
| + List result = _MojoSharedBufferNatives.Duplicate(msb.handle.h, flags);
|
| + if (result == null) {
|
| + return null;
|
| + }
|
| + assert((result is List) && (result.length == 2));
|
| + var r = new MojoResult(result[0]);
|
| + if(!r.isOk) {
|
| + return null;
|
| + }
|
| +
|
| + MojoSharedBuffer dupe = new MojoSharedBuffer._();
|
| + dupe.status = r;
|
| + dupe.handle = new RawMojoHandle(result[1]);
|
| + dupe.mapping = msb.mapping;
|
| + return dupe;
|
| + }
|
| +
|
| + MojoResult close() {
|
| + if (handle == null) {
|
| + status = MojoResult.INVALID_ARGUMENT;
|
| + return status;
|
| + }
|
| + MojoResult r = handle.close();
|
| + status = r;
|
| + mapping = null;
|
| + return status;
|
| + }
|
| +
|
| + MojoResult map(int offset, int num_bytes, [int flags = 0]) {
|
| + if (handle == null) {
|
| + status = MojoResult.INVALID_ARGUMENT;
|
| + return status;
|
| + }
|
| + List result = _MojoSharedBufferNatives.Map(
|
| + handle.h, offset, num_bytes, flags);
|
| + if (result == null) {
|
| + status = MojoResult.INVALID_ARGUMENT;
|
| + return status;
|
| + }
|
| + assert((result is List) && (result.length == 2));
|
| + status = new MojoResult(result[0]);
|
| + mapping = result[1];
|
| + return status;
|
| + }
|
| +
|
| + MojoResult unmap() {
|
| + int r = _MojoSharedBufferNatives.Unmap(mapping);
|
| + status = new MojoResult(r);
|
| + mapping = null;
|
| + return status;
|
| + }
|
| +}
|
|
|