You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1009 B
Go

package ent
import (
"fmt"
"github.com/jordanorelli/hyperstone/bit"
)
type Entity struct {
*Class
slots []interface{}
}
func (e *Entity) Read(br bit.Reader, sr *selectionReader) error {
if e.Class == nil {
return fmt.Errorf("unable to read entity: entity has no class")
}
Debug.Printf("entity %v read", e)
if err := sr.read(br, htree); err != nil {
return fmt.Errorf("unable to read entity: %v", err)
}
for _, s := range sr.selections() {
switch s.count {
case 0:
panic("field selection makes no sense")
case 1:
Debug.Printf("direct selection: %v", s.path())
field := e.Class.Fields[s.vals[0]]
Debug.Printf("field: %v", e.Class.Fields[s.vals[0]])
fn := field.decoder
if fn == nil {
Info.Fatalf("field has no decoder: %v", field)
}
v, err := fn(br), br.Err()
Debug.Printf("value: %v err: %v", v, err)
if err != nil {
Info.Fatalf("field decode error: %v", err)
}
default:
Debug.Printf("child selection: %v", s.path())
}
}
return nil
}