45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
package object
|
|
|
|
// Descriptors describes a set of object classes.
|
|
type Descriptors []ClassDescriptor
|
|
|
|
// ClassDescriptor describes a single object class.
|
|
type ClassDescriptor struct {
|
|
// GenericDataSize specifies the length, in bytes, of one generic type entry.
|
|
GenericDataSize int
|
|
// Subclasses contains descriptions of the subclasses of this class.
|
|
// The index into the array is the subclass ID.
|
|
Subclasses []SubclassDescriptor
|
|
}
|
|
|
|
// TotalDataSize returns the total length the class requires.
|
|
func (desc ClassDescriptor) TotalDataSize() int {
|
|
total := 0
|
|
for _, subclass := range desc.Subclasses {
|
|
total += (desc.GenericDataSize * subclass.TypeCount) + subclass.TotalDataSize()
|
|
}
|
|
return total
|
|
}
|
|
|
|
// TotalTypeCount returns the total number of types in this class.
|
|
func (desc ClassDescriptor) TotalTypeCount() int {
|
|
total := 0
|
|
for _, subclass := range desc.Subclasses {
|
|
total += subclass.TypeCount
|
|
}
|
|
return total
|
|
}
|
|
|
|
// SubclassDescriptor describes one subclass.
|
|
type SubclassDescriptor struct {
|
|
// TypeCount specifies how many types exist in this subclass.
|
|
TypeCount int
|
|
// SpecificDataSize specifies the length, in bytes, of one specific type entry.
|
|
SpecificDataSize int
|
|
}
|
|
|
|
// TotalDataSize returns the total length, in bytes, the subclass requires in the properties file.
|
|
func (desc SubclassDescriptor) TotalDataSize() int {
|
|
return (desc.SpecificDataSize + CommonPropertiesSize) * desc.TypeCount
|
|
}
|