123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package module
- import (
- mod "fw/cp/module"
- "fw/rt2/context"
- "fw/xev"
- "os"
- "ypk/assert"
- )
- type List interface {
- context.ContextAware
- AsList() []*mod.Module
- Load(name string) (*mod.Module, error)
- Loaded(name string) *mod.Module
- }
- func New() List {
- return new(list).init()
- }
- type list struct {
- inner map[string]*mod.Module
- d context.Domain
- }
- func (l *list) init() *list {
- l.inner = make(map[string]*mod.Module)
- return l
- }
- func (l *list) AsList() (ret []*mod.Module) {
- if len(l.inner) > 0 {
- ret = make([]*mod.Module, 0)
- }
- for _, v := range l.inner {
- ret = append(ret, v)
- }
- return ret
- }
- func (l *list) Domain() context.Domain {
- return l.d
- }
- func (l *list) Init(d context.Domain) {
- l.d = d
- }
- func (l *list) Handle(msg interface{}) {}
- func (l *list) Load(name string) (*mod.Module, error) {
- assert.For(name != "", 20)
- ret := l.Loaded(name)
- if ret == nil {
- path, _ := os.Getwd()
- ret = xev.Load(path, name+".oxf")
- l.inner[name] = ret
- }
- return ret, nil
- }
- func (l *list) Loaded(name string) *mod.Module {
- assert.For(name != "", 20)
- return l.inner[name]
- }
- func DomainModule(d context.Domain) *mod.Module {
- uni := d.Discover(context.UNIVERSE).(context.Domain)
- name := uni.Id(d)
- ml := uni.Discover(context.MOD).(List)
- return ml.Loaded(name)
- }
|