mirror of https://github.com/dsoprea/go-exif.git
ifd_enumerate.go: Eliminate unnecessary buffering
A simplification prior to some upcoming data-access changes.dustin/master
parent
5a15f40e78
commit
4692087c1a
|
@ -77,7 +77,6 @@ type byteParser struct {
|
|||
byteOrder binary.ByteOrder
|
||||
addressableData []byte
|
||||
ifdOffset uint32
|
||||
buffer *bytes.Buffer
|
||||
currentOffset uint32
|
||||
}
|
||||
|
||||
|
@ -91,7 +90,6 @@ func newByteParser(addressableData []byte, byteOrder binary.ByteOrder, ifdOffset
|
|||
bp = &byteParser{
|
||||
addressableData: addressableData,
|
||||
byteOrder: byteOrder,
|
||||
buffer: bytes.NewBuffer(addressableData[ifdOffset:]),
|
||||
currentOffset: ifdOffset,
|
||||
}
|
||||
|
||||
|
@ -111,16 +109,12 @@ func (bp *byteParser) getUint16() (value uint16, raw []byte, err error) {
|
|||
// TODO(dustin): Add test
|
||||
|
||||
needBytes := 2
|
||||
offset := 0
|
||||
raw = make([]byte, needBytes)
|
||||
|
||||
for offset < needBytes {
|
||||
n, err := bp.buffer.Read(raw[offset:])
|
||||
log.PanicIf(err)
|
||||
|
||||
offset += n
|
||||
if bp.currentOffset+needBytes >= len(bp.addressableData) {
|
||||
return 0, nil, io.EOF
|
||||
}
|
||||
|
||||
raw = addressableData[bp.currentOffset : bp.currentOffset+needBytes]
|
||||
value = bp.byteOrder.Uint16(raw)
|
||||
|
||||
bp.currentOffset += uint32(needBytes)
|
||||
|
@ -141,17 +135,13 @@ func (bp *byteParser) getUint32() (value uint32, raw []byte, err error) {
|
|||
// TODO(dustin): Add test
|
||||
|
||||
needBytes := 4
|
||||
offset := 0
|
||||
raw = make([]byte, needBytes)
|
||||
|
||||
for offset < needBytes {
|
||||
n, err := bp.buffer.Read(raw[offset:])
|
||||
log.PanicIf(err)
|
||||
|
||||
offset += n
|
||||
if bp.currentOffset+needBytes >= len(bp.addressableData) {
|
||||
return 0, nil, io.EOF
|
||||
}
|
||||
|
||||
value = bp.byteOrder.Uint32(raw)
|
||||
raw = addressableData[bp.currentOffset : bp.currentOffset+needBytes]
|
||||
value = bp.byteOrder.Uint16(raw)
|
||||
|
||||
bp.currentOffset += uint32(needBytes)
|
||||
|
||||
|
@ -168,7 +158,6 @@ func (bp *byteParser) CurrentOffset() uint32 {
|
|||
// containers in the EXIF blob.
|
||||
type IfdEnumerate struct {
|
||||
exifData []byte
|
||||
buffer *bytes.Buffer
|
||||
byteOrder binary.ByteOrder
|
||||
tagIndex *TagIndex
|
||||
ifdMapping *exifcommon.IfdMapping
|
||||
|
@ -179,7 +168,6 @@ type IfdEnumerate struct {
|
|||
func NewIfdEnumerate(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, exifData []byte, byteOrder binary.ByteOrder) *IfdEnumerate {
|
||||
return &IfdEnumerate{
|
||||
exifData: exifData,
|
||||
buffer: bytes.NewBuffer(exifData),
|
||||
byteOrder: byteOrder,
|
||||
ifdMapping: ifdMapping,
|
||||
tagIndex: tagIndex,
|
||||
|
|
Loading…
Reference in New Issue