func (f *fen) Watched(n interface{}) (*watched, int64, error) {
	pe := inter2pe(n)
	fo, ok := pe.PortevObject.(*FileObj)
	if !ok || fo == nil {
		panic(fmt.Sprintf("fen: type should be *FileObj, %T instead", fo))
	}
	w, ok := f.pthLkp[fo.Name]
	if !ok {
		return nil, 0, errNotWatched
	}
	return w, int64(pe.PortevEvents), nil
}
Watched implements trigger.
package notify
import (
	"fmt"
	"os"
	"syscall"
)
func newTrigger(pthLkp map[string]*watched) trigger {
	return &fen{
		pthLkp: pthLkp,
		cf:     newCfen(),
	}
}
type fen struct {
	p int
	pthLkp map[string]*watched
	cf cfen
}
type watched struct {
	trgWatched
}
func (f *fen) Stop() error {
	return f.cf.portAlert(f.p)
}
func (f *fen) Close() (err error) {
	return syscall.Close(f.p)
}
func (*fen) NewWatched(p string, fi os.FileInfo) (*watched, error) {
	return &watched{trgWatched{p: p, fi: fi}}, nil
}
func (f *fen) Record(w *watched) {
	f.pthLkp[w.p] = w
}
func (f *fen) Del(w *watched) {
	delete(f.pthLkp, w.p)
}
func inter2pe(n interface{}) PortEvent {
	pe, ok := n.(PortEvent)
	if !ok {
		panic(fmt.Sprintf("fen: type should be PortEvent, %T instead", n))
	}
	return pe
}