package yu_pack

// -----------------------------------------------------------------------------------------------------组包

func (t *Pack) PushByte(val ...byte) *Pack {
	t.Grow(len(val))
	t.buf = append(t.buf, val...)
	return t
}

/*
PushInt16L 追加int16数据

val 可循环添加，字节序为：小端字节序——将低序字节存储在起始地址(123=>[123 0])
*/
func (t *Pack) PushInt16L(val ...int16) *Pack {
	t.Grow(2 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf, byte(val[j_i]), byte(val[j_i]>>8))
	}
	return t
}

/*
PushInt16B 追加int16数据

val 可循环添加，字节序为：大端字节序——将高序字节存储在起始地址(123=>[0 123])
*/
func (t *Pack) PushInt16B(val ...int16) *Pack {
	t.Grow(2 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf, byte(val[j_i]>>8), byte(val[j_i]))
	}
	return t
}

/*
PushInt16L 追加int16数据

val 可循环添加，字节序为：小端字节序——将低序字节存储在起始地址(123=>[123 0])
*/
func (t *Pack) PushUint16L(val ...uint16) *Pack {
	t.Grow(2 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf, byte(val[j_i]), byte(val[j_i]>>8))
	}
	return t
}

/*
PushInt16B 追加int16数据

val 可循环添加，字节序为：大端字节序——将高序字节存储在起始地址(123=>[0 123])
*/
func (t *Pack) PushUint16B(val ...uint16) *Pack {
	t.Grow(2 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf, byte(val[j_i]>>8), byte(val[j_i]))
	}
	return t
}

/*
PushInt32L 追加int32数据

val 可循环添加，字节序为：小端字节序——将低序字节存储在起始地址(123=>[123 0])
*/
func (t *Pack) PushInt32L(val ...int32) *Pack {
	t.Grow(4 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf,
			byte(val[j_i]), byte(val[j_i]>>8),
			byte(val[j_i]>>16), byte(val[j_i]>>24),
		)
	}
	return t
}

/*
PushInt32B 追加int32数据

val 可循环添加，字节序为：大端字节序——将高序字节存储在起始地址(123=>[0 123])
*/
func (t *Pack) PushInt32B(val ...int32) *Pack {
	t.Grow(4 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf,
			byte(val[j_i]>>24), byte(val[j_i]>>16),
			byte(val[j_i]>>8), byte(val[j_i]),
		)
	}
	return t
}

/*
PushInt32L 追加int32数据

val 可循环添加，字节序为：小端字节序——将低序字节存储在起始地址(123=>[123 0])
*/
func (t *Pack) PushUint32L(val ...uint32) *Pack {
	t.Grow(4 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf,
			byte(val[j_i]), byte(val[j_i]>>8),
			byte(val[j_i]>>16), byte(val[j_i]>>24),
		)
	}
	return t
}

/*
PushInt32B 追加int32数据

val 可循环添加，字节序为：大端字节序——将高序字节存储在起始地址(123=>[0 123])
*/
func (t *Pack) PushUint32B(val ...uint32) *Pack {
	t.Grow(4 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf,
			byte(val[j_i]>>24), byte(val[j_i]>>16),
			byte(val[j_i]>>8), byte(val[j_i]),
		)
	}
	return t
}

/*
PushInt64L 追加int64数据

val 可循环添加，字节序为：小端字节序——将低序字节存储在起始地址(123=>[123 0])
*/
func (t *Pack) PushInt64L(val ...int64) *Pack {
	t.Grow(8 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf,
			byte(val[j_i]), byte(val[j_i]>>8),
			byte(val[j_i]>>16), byte(val[j_i]>>24),
			byte(val[j_i]>>32), byte(val[j_i]>>40),
			byte(val[j_i]>>48), byte(val[j_i]>>56),
		)
	}
	return t
}

/*
PushInt64B 追加int64数据

val 可循环添加，字节序为：大端字节序——将高序字节存储在起始地址(123=>[0 123])
*/
func (t *Pack) PushInt64B(val ...int64) *Pack {
	t.Grow(8 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf,
			byte(val[j_i]>>56), byte(val[j_i]>>48),
			byte(val[j_i]>>40), byte(val[j_i]>>32),
			byte(val[j_i]>>24), byte(val[j_i]>>16),
			byte(val[j_i]>>8), byte(val[j_i]),
		)
	}
	return t
}

/*
PushInt64L 追加int64数据

val 可循环添加，字节序为：小端字节序——将低序字节存储在起始地址(123=>[123 0])
*/
func (t *Pack) PushUint64L(val ...uint64) *Pack {
	t.Grow(8 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf,
			byte(val[j_i]), byte(val[j_i]>>8),
			byte(val[j_i]>>16), byte(val[j_i]>>24),
			byte(val[j_i]>>32), byte(val[j_i]>>40),
			byte(val[j_i]>>48), byte(val[j_i]>>56),
		)
	}
	return t
}

/*
PushInt64B 追加int64数据

val 可循环添加，字节序为：大端字节序——将高序字节存储在起始地址(123=>[0 123])
*/
func (t *Pack) PushUint64B(val ...uint64) *Pack {
	t.Grow(8 * len(val))
	for j_i := 0; j_i < len(val); j_i++ {
		t.buf = append(t.buf,
			byte(val[j_i]>>56), byte(val[j_i]>>48),
			byte(val[j_i]>>40), byte(val[j_i]>>32),
			byte(val[j_i]>>24), byte(val[j_i]>>16),
			byte(val[j_i]>>8), byte(val[j_i]),
		)
	}
	return t
}

func (t *Pack) PushBytes(val []byte) *Pack {
	t.Grow(len(val))
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushBytesByte(val []byte, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 1)
	j_len += add
	t.buf = append(t.buf, byte(j_len))
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushBytesInt16L(val []byte, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 2)
	j_len += add
	t.buf = append(t.buf, byte(j_len), byte(j_len>>8))
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushBytesInt16B(val []byte, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 2)
	j_len += add
	t.buf = append(t.buf, byte(j_len>>8), byte(j_len))
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushBytesInt32L(val []byte, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 4)
	j_len += add
	t.buf = append(t.buf,
		byte(j_len), byte(j_len>>8),
		byte(j_len>>16), byte(j_len>>24),
	)
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushBytesInt32B(val []byte, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 4)
	j_len += add
	t.buf = append(t.buf,
		byte(j_len>>24), byte(j_len>>16),
		byte(j_len>>8), byte(j_len),
	)
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushBytesInt64L(val []byte, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 8)
	j_len += add
	t.buf = append(t.buf,
		byte(j_len), byte(j_len>>8),
		byte(j_len>>16), byte(j_len>>24),
		byte(j_len>>32), byte(j_len>>40),
		byte(j_len>>48), byte(j_len>>56),
	)
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushBytesInt64B(val []byte, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 8)
	j_len += add
	t.buf = append(t.buf,
		byte(j_len>>56), byte(j_len>>48),
		byte(j_len>>40), byte(j_len>>32),
		byte(j_len>>24), byte(j_len>>16),
		byte(j_len>>8), byte(j_len),
	)
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushString(val string) *Pack {
	t.Grow(len(val))
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushStringByte(val string, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 1)
	j_len += add
	t.buf = append(t.buf, byte(j_len))
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushStringInt16L(val string, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 2)
	j_len += add
	t.buf = append(t.buf, byte(j_len), byte(j_len>>8))
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushStringInt16B(val string, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 2)
	j_len += add
	t.buf = append(t.buf, byte(j_len>>8), byte(j_len))
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushStringInt32L(val string, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 4)
	j_len += add
	t.buf = append(t.buf,
		byte(j_len), byte(j_len>>8),
		byte(j_len>>16), byte(j_len>>24),
	)
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushStringInt32B(val string, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 4)
	j_len += add
	t.buf = append(t.buf,
		byte(j_len>>24), byte(j_len>>16),
		byte(j_len>>8), byte(j_len),
	)
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushStringInt64L(val string, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 8)
	j_len += add
	t.buf = append(t.buf,
		byte(j_len), byte(j_len>>8),
		byte(j_len>>16), byte(j_len>>24),
		byte(j_len>>32), byte(j_len>>40),
		byte(j_len>>48), byte(j_len>>56),
	)
	t.buf = append(t.buf, val...)
	return t
}

func (t *Pack) PushStringInt64B(val string, add int) *Pack {
	j_len := len(val)
	t.Grow(j_len + 8)
	j_len += add
	t.buf = append(t.buf,
		byte(j_len>>56), byte(j_len>>48),
		byte(j_len>>40), byte(j_len>>32),
		byte(j_len>>24), byte(j_len>>16),
		byte(j_len>>8), byte(j_len),
	)
	t.buf = append(t.buf, val...)
	return t
}
