Commit aaa7e243 authored by Han-Wen Nienhuys's avatar Han-Wen Nienhuys

Add Has method to HandleMap interface.

parent c44d05f4
......@@ -23,6 +23,7 @@ type HandleMap interface {
Register(obj *Handled, asInt interface{}) uint64
Count() int
Forget(uint64) *Handled
Has(uint64) bool
}
type Handled struct {
......@@ -44,6 +45,13 @@ func (me *int32HandleMap) Register(obj *Handled, asInt interface{}) uint64 {
return uint64(handle)
}
func (me *int32HandleMap) Has(h uint64) bool {
me.mutex.Lock()
defer me.mutex.Unlock()
return me.handles[uint32(h)] != nil
}
func (me *int32HandleMap) Count() int {
me.mutex.Lock()
defer me.mutex.Unlock()
......@@ -158,6 +166,12 @@ func (me *int64HandleMap) Forget(handle uint64) (val *Handled) {
return val
}
func (me *int64HandleMap) Has(handle uint64) bool {
me.mutex.Lock()
defer me.mutex.Unlock()
return me.handles[handle] != nil
}
func DecodeHandle(handle uint64) (val *Handled) {
var check uint32
if unsafe.Sizeof(val) == 8 {
......
......@@ -73,6 +73,9 @@ func TestHandleMapBasic(t *testing.T) {
hm := NewHandleMap(true)
h := hm.Register(v, v)
log.Printf("Got handle 0x%x", h)
if !hm.Has(h) {
t.Fatal("Does not have handle")
}
if DecodeHandle(h) != v {
t.Fatal("address mismatch")
}
......@@ -83,6 +86,9 @@ func TestHandleMapBasic(t *testing.T) {
if hm.Count() != 0 {
t.Fatal("count error")
}
if hm.Has(h) {
t.Fatal("Still has handle")
}
}
func TestHandleMapMultiple(t *testing.T) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment