Index: mojo/public/go/system/impl/mojo_types.go |
diff --git a/mojo/public/go/system/impl/mojo_types.go b/mojo/public/go/system/impl/mojo_types.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9156a4594e5e680127324fd22204301cbb9366f9 |
--- /dev/null |
+++ b/mojo/public/go/system/impl/mojo_types.go |
@@ -0,0 +1,212 @@ |
+// 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. |
+ |
+package impl |
+ |
+//#include "mojo/public/platform/native/system_thunks.h" |
+//#include "mojo/public/c/system/main.h" |
+import "C" |
+import ( |
+ "math" |
+ "unsafe" |
+) |
+ |
+// Go equivalent definitions of the various system types defined in Mojo. |
+// mojo/public/c/system/types.h |
+// mojo/public/c/system/data_pipe.h |
+// mojo/public/c/system/message_pipe.h |
+// |
+type MojoTimeTicks int64 |
+type MojoHandle uint32 |
+type MojoResult int32 |
+type MojoDeadline uint64 |
+type MojoHandleSignals uint32 |
+type MojoWriteMessageFlags uint32 |
+type MojoReadMessageFlags uint32 |
+type MojoWriteDataFlags uint32 |
+type MojoReadDataFlags uint32 |
+type MojoCreateDataPipeOptionsFlags uint32 |
+type MojoCreateMessagePipeOptionsFlags uint32 |
+type MojoCreateSharedBufferOptionsFlags uint32 |
+type MojoDuplicateBufferHandleOptionsFlags uint32 |
+type MojoMapBufferFlags uint32 |
+ |
+const ( |
+ MOJO_DEADLINE_INDEFINITE MojoDeadline = math.MaxUint64 |
+ MOJO_HANDLE_INVALID MojoHandle = 0 |
+ MOJO_RESULT_OK MojoResult = 0 |
+ MOJO_RESULT_CANCELLED = -1 |
+ MOJO_RESULT_UNKNOWN = -2 |
+ MOJO_RESULT_INVALID_ARGUMENT = -3 |
+ MOJO_RESULT_DEADLINE_EXCEEDED = -4 |
+ MOJO_RESULT_NOT_FOUND = -5 |
+ MOJO_RESULT_ALREADY_EXISTS = -6 |
+ MOJO_RESULT_PERMISSION_DENIED = -7 |
+ MOJO_RESULT_RESOURCE_EXHAUSTED = -8 |
+ MOJO_RESULT_FAILED_PRECONDITION = -9 |
+ MOJO_RESULT_ABORTED = -10 |
+ MOJO_RESULT_OUT_OF_RANGE = -11 |
+ MOJO_RESULT_UNIMPLEMENTED = -12 |
+ MOJO_RESULT_INTERNAL = -13 |
+ MOJO_RESULT_UNAVAILABLE = -14 |
+ MOJO_RESULT_DATA_LOSS = -15 |
+ MOJO_RESULT_BUSY = -16 |
+ MOJO_RESULT_SHOULD_WAIT = -17 |
+ |
+ MOJO_HANDLE_SIGNAL_NONE MojoHandleSignals = 0 |
+ MOJO_HANDLE_SIGNAL_READABLE = 1 << 0 |
+ MOJO_HANDLE_SIGNAL_WRITABLE = 1 << 1 |
+ |
+ MOJO_WRITE_MESSAGE_FLAG_NONE MojoWriteMessageFlags = 0 |
+ MOJO_READ_MESSAGE_FLAG_NONE MojoReadMessageFlags = 0 |
+ MOJO_READ_MESSAGE_FLAG_MAY_DISCARD = 1 << 0 |
+ |
+ MOJO_READ_DATA_FLAG_NONE MojoReadDataFlags = 0 |
+ MOJO_READ_DATA_FLAG_ALL_OR_NONE = 1 << 0 |
+ MOJO_READ_DATA_FLAG_DISCARD = 1 << 1 |
+ MOJO_READ_DATA_FLAG_QUERY = 1 << 2 |
+ MOJO_WRITE_DATA_FLAG_NONE MojoWriteDataFlags = 0 |
+ MOJO_WRITE_DATA_FLAG_ALL_OR_NONE MojoWriteDataFlags = 1 << 0 |
+ |
+ MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE MojoCreateDataPipeOptionsFlags = 0 |
+ MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD = 1 << 0 |
+ MOJO_CREATE_MESSAGE_PIPE_OPTIONS_FLAG_NONE MojoCreateMessagePipeOptionsFlags = 0 |
+ |
+ MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE MojoCreateSharedBufferOptionsFlags = 0 |
+ MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE MojoDuplicateBufferHandleOptionsFlags = 0 |
+ MOJO_MAP_BUFFER_FLAG_NONE MojoMapBufferFlags = 0 |
+) |
+ |
+// DataPipeOptions is used to specify creation parameters for a data pipe. |
+type DataPipeOptions struct { |
+ flags MojoCreateDataPipeOptionsFlags |
+ // The size of an element in bytes. All transactions and buffers will |
+ // be an integral number of elements. |
+ elemSize uint32 |
+ // The capacity of the data pipe in bytes. Must be a multiple of elemSize. |
+ capacity uint32 |
+} |
+ |
+func (opts *DataPipeOptions) cType() *C.struct_MojoCreateDataPipeOptions { |
+ if opts == nil { |
+ return nil |
+ } |
+ var cOpts C.struct_MojoCreateDataPipeOptions |
+ cOpts = C.struct_MojoCreateDataPipeOptions{ |
+ (C.uint32_t)(unsafe.Sizeof(cOpts)), |
+ opts.flags.cType(), |
+ (C.uint32_t)(opts.elemSize), |
+ (C.uint32_t)(opts.capacity), |
+ } |
+ return &cOpts |
+} |
+ |
+// MessagePipeOptions is used to specify creation parameters for a message pipe. |
+type MessagePipeOptions struct { |
+ flags MojoCreateMessagePipeOptionsFlags |
+} |
+ |
+func (opts *MessagePipeOptions) cType() *C.struct_MojoCreateMessagePipeOptions { |
+ if opts == nil { |
+ return nil |
+ } |
+ var cOpts C.struct_MojoCreateMessagePipeOptions |
+ cOpts = C.struct_MojoCreateMessagePipeOptions{ |
+ (C.uint32_t)(unsafe.Sizeof(cOpts)), |
+ opts.flags.cType(), |
+ } |
+ return &cOpts |
+} |
+ |
+// SharedBufferOptions is used to specify creation parameters for a |
+// shared buffer. |
+type SharedBufferOptions struct { |
+ flags MojoCreateSharedBufferOptionsFlags |
+} |
+ |
+func (opts *SharedBufferOptions) cType() *C.struct_MojoCreateSharedBufferOptions { |
+ if opts == nil { |
+ return nil |
+ } |
+ var cOpts C.struct_MojoCreateSharedBufferOptions |
+ cOpts = C.struct_MojoCreateSharedBufferOptions{ |
+ (C.uint32_t)(unsafe.Sizeof(cOpts)), |
+ opts.flags.cType(), |
+ } |
+ return &cOpts |
+} |
+ |
+// DuplicateBufferHandleOptions is used to specify parameters in |
+// duplicating access to a shared buffer. |
+type DuplicateBufferHandleOptions struct { |
+ flags MojoDuplicateBufferHandleOptionsFlags |
+} |
+ |
+func (opts *DuplicateBufferHandleOptions) cType() *C.struct_MojoDuplicateBufferHandleOptions { |
+ if opts == nil { |
+ return nil |
+ } |
+ var cOpts C.struct_MojoDuplicateBufferHandleOptions |
+ cOpts = C.struct_MojoDuplicateBufferHandleOptions{ |
+ (C.uint32_t)(unsafe.Sizeof(cOpts)), |
+ opts.flags.cType(), |
+ } |
+ return &cOpts |
+} |
+ |
+// Convenience functions to convert Go types to their equivalent C types. |
+func (m MojoHandle) cType() C.MojoHandle { |
+ return (C.MojoHandle)(m) |
+} |
+func (m MojoDeadline) cType() C.MojoDeadline { |
+ return (C.MojoDeadline)(m) |
+} |
+func (m MojoHandleSignals) cType() C.MojoHandleSignals { |
+ return (C.MojoHandleSignals)(m) |
+} |
+func (m MojoWriteMessageFlags) cType() C.MojoWriteMessageFlags { |
+ return (C.MojoWriteMessageFlags)(m) |
+} |
+func (m MojoReadMessageFlags) cType() C.MojoReadMessageFlags { |
+ return (C.MojoReadMessageFlags)(m) |
+} |
+func (m MojoWriteDataFlags) cType() C.MojoWriteDataFlags { |
+ return (C.MojoWriteDataFlags)(m) |
+} |
+func (m MojoReadDataFlags) cType() C.MojoReadDataFlags { |
+ return (C.MojoReadDataFlags)(m) |
+} |
+func (m MojoCreateDataPipeOptionsFlags) cType() C.MojoCreateDataPipeOptionsFlags { |
+ return (C.MojoCreateDataPipeOptionsFlags)(m) |
+} |
+func (m MojoCreateMessagePipeOptionsFlags) cType() C.MojoCreateMessagePipeOptionsFlags { |
+ return (C.MojoCreateMessagePipeOptionsFlags)(m) |
+} |
+func (m MojoCreateSharedBufferOptionsFlags) cType() C.MojoCreateSharedBufferOptionsFlags { |
+ return (C.MojoCreateSharedBufferOptionsFlags)(m) |
+} |
+func (m MojoDuplicateBufferHandleOptionsFlags) cType() C.MojoDuplicateBufferHandleOptionsFlags { |
+ return (C.MojoDuplicateBufferHandleOptionsFlags)(m) |
+} |
+func (m MojoMapBufferFlags) cType() C.MojoMapBufferFlags { |
+ return (C.MojoMapBufferFlags)(m) |
+} |
+func cArrayMojoHandle(m []MojoHandle) *C.MojoHandle { |
+ if len(m) == 0 { |
+ return nil |
+ } |
+ return (*C.MojoHandle)(&m[0]) |
+} |
+func cArrayMojoHandleSignals(m []MojoHandleSignals) *C.MojoHandleSignals { |
+ if len(m) == 0 { |
+ return nil |
+ } |
+ return (*C.MojoHandleSignals)(&m[0]) |
+} |
+func cArrayBytes(m []byte) unsafe.Pointer { |
+ if len(m) == 0 { |
+ return nil |
+ } |
+ return unsafe.Pointer(&m[0]) |
+} |