1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package module
- import (
- mod "cp/module"
- "os"
- "rt2/context"
- "xev"
- "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) 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)
- }
|