我有一个 3 元素枚举,它定义了三个上下文之一,例如红色、绿色或蓝色。此枚举用于具有数百万次迭代的循环中,例如像素很多。这些字段当前是一个int
默认值。给定 R,G,B,R,G,B... 的所需生产顺序,我目前已采取措施检查该值当前是否为 B,从而将其分配给 R,否则增加该值。
private enum CHANNEL_CONTEXT {RED, GREEN, BLUE} //here is a sample enum
//here is a sample loop with the relevant construct
CHANNEL_CONTEXT current = CHANNEL_CONTEXT.RED;
while(condition)
{
use current;
//...
if(current == CHANNEL_CONTEXT.BLUE)
current = CHANNEL_CONTEXT.RED
else
current+=1;
}
有没有办法用单个操作包装一个 3 字段枚举,这样就不需要分支来确定是否该包装了。我知道模数(%
)符合要求,但我的动机是基于性能的,而且我最多只能通过如此昂贵的操作来收支平衡(测试得到证实,但并非详尽无遗)。
为了正确看待我的议程,如果我有 256 个相关字段,我可以创建一个基于字节的枚举,并在不受惩罚和预期溢出的情况下递增。唉,我只有三个,我想不出一种方法来操作任何积分原语,以循环产生三个值的方式,使用轻量级 ALU 操作,(+,-,&,^,|,<<.. ETC)。我也无法想出一种无需临时使用此类操作即可交换位的方法,但是有一种很少实用但可行的方法。
有人可以指导我分配3个整数枚举值的方法,以便它们可以定期遍历,不需要分支,也不需要使用基于除法的运算符(如模数)?