/// <summary> /// Initializes the bit string. /// </summary> /// <param name="discreteSpaceDescriptor">The discrete space descriptor.</param> /// <returns>BitByteHexLimits[].</returns> internal static BitByteHexLimits[] InitializeBitString(DesignSpaceDescription discreteSpaceDescriptor) { var result = new BitByteHexLimits[discreteSpaceDescriptor.n]; var currentIndex = 0; for (var i = 0; i < discreteSpaceDescriptor.n; i++) { if (discreteSpaceDescriptor[i].Discrete) { var maxValue = discreteSpaceDescriptor.MaxVariableSizes[i]; var numberBits = (int)(Math.Log(maxValue, 2)) + 1; var endIndex = currentIndex + numberBits; result[i] = new BitByteHexLimits { StartIndex = currentIndex, EndIndex = endIndex, MaxValue = maxValue }; currentIndex = endIndex; } else { result[i] = new BitByteHexLimits(); } } return(result); }
/// <summary> /// Flips the bit. /// </summary> /// <param name="initValue">The initialize value.</param> /// <param name="limits">The limits.</param> /// <param name="bitIndex">Index of the bit.</param> /// <returns>System.Int64.</returns> internal static long FlipBit(long initValue, BitByteHexLimits limits, int bitIndex) { bitIndex -= limits.StartIndex; var b = Encode(initValue, limits.EndIndex - limits.StartIndex); b.Set(bitIndex, !b[bitIndex]); return(Decode(b, limits.MaxValue)); }