| // 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 numBytes, int flags) |
| native "MojoSharedBuffer_Create"; |
| |
| static List Duplicate(int bufferHandle, int flags) |
| native "MojoSharedBuffer_Duplicate"; |
| |
| static List Map(MojoSharedBuffer buffer, |
| int bufferHandle, |
| int offset, |
| int numBytes, |
| 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; |
| |
| MojoHandle handle; |
| MojoResult status; |
| ByteData mapping; |
| |
| MojoSharedBuffer( |
| this.handle, [this.status = MojoResult.OK, this.mapping = null]); |
| |
| factory MojoSharedBuffer.create(int numBytes, [int flags = 0]) { |
| List result = _MojoSharedBufferNatives.Create(numBytes, 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(new MojoHandle(result[1]), r, 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(new MojoHandle(result[1]), r, null); |
| 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 numBytes, [int flags = 0]) { |
| if (handle == null) { |
| status = MojoResult.INVALID_ARGUMENT; |
| return status; |
| } |
| List result = _MojoSharedBufferNatives.Map( |
| this, handle.h, offset, numBytes, 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; |
| } |
| } |