// Copyright 2020 The Go 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 zx

import "sync/atomic"

type Socket Handle
type Event Handle
type Channel Handle
type Port Handle
type VMO Handle
type VMAR Handle
type Log Handle

func (s *Socket) Handle() *Handle {
	return (*Handle)(s)
}
func (e *Event) Handle() *Handle {
	return (*Handle)(e)
}
func (c *Channel) Handle() *Handle {
	return (*Handle)(c)
}
func (p *Port) Handle() *Handle {
	return (*Handle)(p)
}
func (vmo *VMO) Handle() *Handle {
	return (*Handle)(vmo)
}
func (l *Log) Handle() *Handle {
	return (*Handle)(l)
}

func (h *Handle) Load() Handle {
	return Handle(atomic.LoadUint32((*uint32)(h)))
}
func (h *Handle) IsValid() bool {
	return h.Load() > HandleInvalid
}

const (
	ChannelMaxMessageBytes   = 65536
	ChannelMaxMessageHandles = 64
)
