// Copyright 2015 The Vanadium 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 transcoder

type bytesRef struct {
	allocator            *allocator
	startIndex, endIndex uint32
}

func (b bytesRef) Slice(low, high uint32) bytesRef {
	return bytesRef{
		allocator:  b.allocator,
		startIndex: b.startIndex + low,
		endIndex:   b.startIndex + high,
	}
}

// SignedSlice allows going backwards in the slice (temporary hack to include header in slice for unions)
func (b bytesRef) SignedSlice(low, high int) bytesRef {
	return bytesRef{
		allocator:  b.allocator,
		startIndex: uint32(int(b.startIndex) + low),
		endIndex:   uint32(int(b.startIndex) + high),
	}
}

func (b bytesRef) Bytes() []byte {
	return b.allocator.buf[b.startIndex:b.endIndex]
}

func (b bytesRef) AsPointer(fromRefPos bytesRef) uint32 {
	offset := b.startIndex - fromRefPos.startIndex
	if offset <= 0 {
		panic("invalid non-positive offset for pointer")
	}
	return offset - HEADER_SIZE
}
