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 { ...@@ -23,6 +23,7 @@ type HandleMap interface {
Register(obj *Handled, asInt interface{}) uint64 Register(obj *Handled, asInt interface{}) uint64
Count() int Count() int
Forget(uint64) *Handled Forget(uint64) *Handled
Has(uint64) bool
} }
type Handled struct { type Handled struct {
...@@ -44,6 +45,13 @@ func (me *int32HandleMap) Register(obj *Handled, asInt interface{}) uint64 { ...@@ -44,6 +45,13 @@ func (me *int32HandleMap) Register(obj *Handled, asInt interface{}) uint64 {
return uint64(handle) 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 { func (me *int32HandleMap) Count() int {
me.mutex.Lock() me.mutex.Lock()
defer me.mutex.Unlock() defer me.mutex.Unlock()
...@@ -158,6 +166,12 @@ func (me *int64HandleMap) Forget(handle uint64) (val *Handled) { ...@@ -158,6 +166,12 @@ func (me *int64HandleMap) Forget(handle uint64) (val *Handled) {
return val 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) { func DecodeHandle(handle uint64) (val *Handled) {
var check uint32 var check uint32
if unsafe.Sizeof(val) == 8 { if unsafe.Sizeof(val) == 8 {
......
...@@ -73,6 +73,9 @@ func TestHandleMapBasic(t *testing.T) { ...@@ -73,6 +73,9 @@ func TestHandleMapBasic(t *testing.T) {
hm := NewHandleMap(true) hm := NewHandleMap(true)
h := hm.Register(v, v) h := hm.Register(v, v)
log.Printf("Got handle 0x%x", h) log.Printf("Got handle 0x%x", h)
if !hm.Has(h) {
t.Fatal("Does not have handle")
}
if DecodeHandle(h) != v { if DecodeHandle(h) != v {
t.Fatal("address mismatch") t.Fatal("address mismatch")
} }
...@@ -83,6 +86,9 @@ func TestHandleMapBasic(t *testing.T) { ...@@ -83,6 +86,9 @@ func TestHandleMapBasic(t *testing.T) {
if hm.Count() != 0 { if hm.Count() != 0 {
t.Fatal("count error") t.Fatal("count error")
} }
if hm.Has(h) {
t.Fatal("Still has handle")
}
} }
func TestHandleMapMultiple(t *testing.T) { 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