Merges some common code between integer and enum.
Enum can now bw a set.
Add valuer must take a interface{} in addValue since it can be different types.
42 lines
613 B
Go
42 lines
613 B
Go
package ipp
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
type enum struct {
|
|
name string
|
|
values []int32
|
|
}
|
|
|
|
func NewEnum(name string, values ...int32) *enum {
|
|
e := new(enum)
|
|
e.name = name
|
|
e.values = values
|
|
return e
|
|
}
|
|
|
|
func (e enum) Name() string {
|
|
return e.name
|
|
}
|
|
|
|
func (e enum) String() string {
|
|
return e.name + ":" + fmt.Sprint(e.values)
|
|
}
|
|
|
|
func (e *enum) valueTag() tag {
|
|
return enumValueTag
|
|
}
|
|
|
|
func (e *enum) size() int {
|
|
return 9 + len(e.name)
|
|
}
|
|
|
|
func (i *enum) addValue(v interface{}) {
|
|
i.values = append(i.values, v.(int32))
|
|
}
|
|
|
|
func (e *enum) marshal() []byte {
|
|
return marshalInteger(enumValueTag, e.name, e.values)
|
|
}
|