// Copyright 2015 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 system

// This interface wraps the "raw" mojo system entry points. This has no
// dependencies on other types in this package so it can be implemented
// by code that doesn't depend on this package.
type MojoSystem interface {
	// Shared buffer
	CreateSharedBuffer(flags uint32, numBytes uint64) (result uint32, handle uint32)
	DuplicateBufferHandle(handle uint32, flags uint32) (result uint32, dupHandle uint32)
	// After a successful MapBuffer call, the caller must pass the same slice value to UnmapBuffer to release
	// the underlying memory segment.
	MapBuffer(handle uint32, offset, numBytes uint64, flags uint32) (result uint32, buf []byte)
	UnmapBuffer(buf []byte) (result uint32)

	// Data pipe
	CreateDataPipe(flags, elementNumBytes, capacityNumBytes uint32) (result uint32, producerHandle, consumerHandle uint32)
	CreateDataPipeWithDefaultOptions() (result uint32, producerHandle, consumerHandle uint32)
	WriteData(producerHandle uint32, buf []byte, flags uint32) (result uint32, bytesWritten uint32)
	BeginWriteData(producerHandle uint32, flags uint32) (result uint32, buf []byte)
	EndWriteData(producerHandle uint32, numBytesWritten uint32) (result uint32)

	ReadData(consumerHandle, flags uint32) (result uint32, buf []byte)
	BeginReadData(consumerHandle uint32, flags uint32) (result uint32, buf []byte)
	EndReadData(consumerHandle uint32, numBytesRead uint32) (result uint32)

	// Time
	GetTimeTicksNow() (timestamp uint64)

	// Close a handle
	Close(handle uint32) (result uint32)

	// Waiting
	Wait(handle uint32, signals uint32, deadline uint64) (result uint32, satisfiedSignals, satisfiableSignals uint32)
	WaitMany(handles []uint32, signals []uint32, deadline uint64) (result uint32, index int, satisfiedSignals, satisfiableSignals []uint32)

	// Message pipe
	CreateMessagePipe(flags uint32) (result uint32, handle0, handle1 uint32)
	WriteMessage(handle uint32, bytes []byte, handles []uint32, flags uint32) (result uint32)
	ReadMessage(handle uint32, flags uint32) (result uint32, buf []byte, handles []uint32)
}

var sysImpl MojoSystem
