| // Copyright 2015 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package binres |
| |
| type DataType uint8 |
| |
| // explicitly defined for clarity and resolvability with apt source |
| const ( |
| DataNull DataType = 0x00 // either 0 or 1 for resource undefined or empty |
| DataReference DataType = 0x01 // ResTable_ref, a reference to another resource table entry |
| DataAttribute DataType = 0x02 // attribute resource identifier |
| DataString DataType = 0x03 // index into the containing resource table's global value string pool |
| DataFloat DataType = 0x04 // single-precision floating point number |
| DataDimension DataType = 0x05 // complex number encoding a dimension value, such as "100in" |
| DataFraction DataType = 0x06 // complex number encoding a fraction of a container |
| DataDynamicReference DataType = 0x07 // dynamic ResTable_ref, which needs to be resolved before it can be used like a TYPE_REFERENCE. |
| DataIntDec DataType = 0x10 // raw integer value of the form n..n |
| DataIntHex DataType = 0x11 // raw integer value of the form 0xn..n |
| DataIntBool DataType = 0x12 // either 0 or 1, for input "false" or "true" |
| DataIntColorARGB8 DataType = 0x1c // raw integer value of the form #aarrggbb |
| DataIntColorRGB8 DataType = 0x1d // raw integer value of the form #rrggbb |
| DataIntColorARGB4 DataType = 0x1e // raw integer value of the form #argb |
| DataIntColorRGB4 DataType = 0x1f // raw integer value of the form #rgb |
| ) |
| |
| type Data struct { |
| ByteSize uint16 |
| Res0 uint8 // always 0, useful for debugging bad read offsets |
| Type DataType |
| Value uint32 |
| } |
| |
| func (d *Data) UnmarshalBinary(bin []byte) error { |
| d.ByteSize = btou16(bin) |
| d.Res0 = uint8(bin[2]) |
| d.Type = DataType(bin[3]) |
| d.Value = btou32(bin[4:]) |
| return nil |
| } |
| |
| func (d *Data) MarshalBinary() ([]byte, error) { |
| bin := make([]byte, 8) |
| putu16(bin, d.ByteSize) |
| bin[2] = byte(d.Res0) |
| bin[3] = byte(d.Type) |
| putu32(bin[4:], d.Value) |
| return bin, nil |
| } |