private static int SubtractImpl(Bitset bs1, Bitset bs2, bool inv) { int s=0; if(!bs1.isLarge && !bs2.isLarge && !inv){ bool[] bits1,bits2; if((bits2=bs2.block0)!=null){ bits1=bs1.block0; if(bits1==null) return 0; s += Subtract(bits1,bits2,0,BLOCK_SIZE-1,false); } } else { if(!bs1.isLarge) bs1.EnableLargeMode(); if(!bs2.isLarge) bs2.EnableLargeMode(); s += Block.Subtract(bs1.blocks,bs2.blocks,0,BLOCK_COUNT-1,inv); } return s; }
private static int AddImpl(Bitset bs1, Bitset bs2, bool inv) { int s=0; if(!bs1.isLarge && !bs2.isLarge && !inv){ if(bs2.block0!=null){ bool[] bits = bs1.block0; if(bits==null) bs1.block0 = bits = new bool[BLOCK_SIZE]; s += Add(bits,bs2.block0,0,BLOCK_SIZE-1,false); } } else { if(!bs1.isLarge) bs1.EnableLargeMode(); if(!bs2.isLarge) bs2.EnableLargeMode(); s+=Block.Add(bs1.blocks,bs2.blocks,0,BLOCK_COUNT-1,inv); } return s; }