read/write struct generic
This commit is contained in:
parent
ac4c53305e
commit
62a85e0392
|
@ -77,6 +77,8 @@ type Struct interface {
|
|||
Writable
|
||||
}
|
||||
|
||||
type StructFactory func(classId uint32) (Struct, error)
|
||||
|
||||
type Bitmasked interface {
|
||||
FieldChanged(index uint64) bool
|
||||
SetFieldChanged(index uint64)
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package meta
|
||||
|
||||
func ReadStructGeneric(r Reader, createStruct StructFactory, field string) (Struct, error) {
|
||||
if err := r.BeginContainer(field); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var classId uint32
|
||||
if err := r.ReadUint32(&classId, ""); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
s, err := createStruct(classId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := s.Read(r); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := r.EndContainer(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return s, nil
|
||||
}
|
||||
|
||||
func WriteStructGeneric(w Writer, s Struct, field string) error {
|
||||
if err := w.BeginCollection(2, field); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := w.WriteUint32(s.ClassId(), ""); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.Write(w); err != nil {
|
||||
return err
|
||||
}
|
||||
return w.EndCollection()
|
||||
}
|
Loading…
Reference in New Issue