package pam

import "sync"

var cb struct {
	sync.Mutex
	m map[int]interface{}
	c int
}

func init() {
	cb.m = make(map[int]interface{})
}

func cbAdd(v interface{}) int {
	cb.Lock()
	defer cb.Unlock()
	cb.c++
	cb.m[cb.c] = v
	return cb.c
}

func cbGet(c int) interface{} {
	cb.Lock()
	defer cb.Unlock()
	if v, ok := cb.m[c]; ok {
		return v
	}
	panic("Callback pointer not found")
}

func cbDelete(c int) {
	cb.Lock()
	defer cb.Unlock()
	if _, ok := cb.m[c]; !ok {
		panic("Callback pointer not found")
	}
	delete(cb.m, c)
}