bool值的内存优化

        之前做游戏快照的时候。大量的游戏对象存在大量的bool值参数。序列化了之后也是一个不小的内存占用。顺便整理了一下做了基于位运算的bool值读写。

package funs

type BoolMask128 struct {
	A BoolMask64
	B BoolMask64
}

func (this *BoolMask128) Set(index int, judge bool) {
	if index >= 64 {
		this.B.Set(index-64, judge)
	} else {
		this.A.Set(index, judge)
	}
}

func (this *BoolMask128) Get(index int) bool {
	if index >= 64 {
		return this.B.Get(index - 64)
	} else {
		return this.A.Get(index)
	}
}

type BoolMask64 uint64

func (this *BoolMask64) Set(index int, judge bool) {
	if judge {
		*this = BoolMask64(uint64(*this) | uint64(1<<index))
	} else {
		*this = BoolMask64(uint64(*this) &^ uint64(1<<index))
	}
}

func (this *BoolMask64) Get(index int) bool {
	return uint64(*this)&uint64(1<<index) > 0
}

type BoolMask32 uint32

func (this *BoolMask32) Set(index int, judge bool) {
	if judge {
		*this = BoolMask32(uint32(*this) | uint32(1<<index))
	} else {
		*this = BoolMask32(uint32(*this) &^ uint32(1<<index))
	}
}

func (this *BoolMask32) Get(index int) bool {
	return uint32(*this)&uint32(1<<index) > 0
}

type BoolMask16 uint16

func (this *BoolMask16) Set(index int, judge bool) {
	if judge {
		*this = BoolMask16(uint16(*this) | uint16(1<<index))
	} else {
		*this = BoolMask16(uint16(*this) &^ uint16(1<<index))
	}
}

func (this *BoolMask16) Get(index int) bool {
	return uint16(*this)&uint16(1<<index) > 0
}

type BoolMask8 uint8

func (this *BoolMask8) Set(index int, judge bool) {
	if judge {
		*this = BoolMask8(uint8(*this) | uint8(1<<index))
	} else {
		*this = BoolMask8(uint8(*this) &^ uint8(1<<index))
	}
}

func (this *BoolMask8) Get(index int) bool {
	return uint8(*this)&uint8(1<<index) > 0
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值