package wasm
import (
"errors"
"fmt"
)
func (s *Store ) deleteModule (m *ModuleInstance ) error {
s .mux .Lock ()
defer s .mux .Unlock ()
if m .prev != nil {
m .prev .next = m .next
}
if m .next != nil {
m .next .prev = m .prev
}
if s .moduleList == m {
s .moduleList = m .next
}
m .prev = nil
m .next = nil
if m .ModuleName != "" {
delete (s .nameToModule , m .ModuleName )
newCap := len (s .nameToModule )
if newCap < nameToModuleShrinkThreshold {
newCap = nameToModuleShrinkThreshold
}
if newCap *2 <= s .nameToModuleCap {
nameToModule := make (map [string ]*ModuleInstance , newCap )
for k , v := range s .nameToModule {
nameToModule [k ] = v
}
s .nameToModule = nameToModule
s .nameToModuleCap = newCap
}
}
return nil
}
func (s *Store ) module (moduleName string ) (*ModuleInstance , error ) {
s .mux .RLock ()
defer s .mux .RUnlock ()
m , ok := s .nameToModule [moduleName ]
if !ok {
return nil , fmt .Errorf ("module[%s] not instantiated" , moduleName )
}
return m , nil
}
func (s *Store ) registerModule (m *ModuleInstance ) error {
s .mux .Lock ()
defer s .mux .Unlock ()
if s .nameToModule == nil {
return errors .New ("already closed" )
}
if m .ModuleName != "" {
if _ , ok := s .nameToModule [m .ModuleName ]; ok {
return fmt .Errorf ("module[%s] has already been instantiated" , m .ModuleName )
}
s .nameToModule [m .ModuleName ] = m
if len (s .nameToModule ) > s .nameToModuleCap {
s .nameToModuleCap = len (s .nameToModule )
}
}
m .next = s .moduleList
if m .next != nil {
m .next .prev = m
}
s .moduleList = m
return nil
}
func (s *Store ) Module (moduleName string ) *ModuleInstance {
m , err := s .module (moduleName )
if err != nil {
return nil
}
return m
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .