public virtual void SetValue(int i) { switch (ValueType) { case DataValueType.HalfByte: data.SetValue(valueIndex, Wla.ToHalfByte((byte)i)); break; case DataValueType.Byte: case DataValueType.WarpDestIndex: default: data.SetByteValue(valueIndex, (byte)i); break; case DataValueType.Word: data.SetWordValue(valueIndex, i); break; case DataValueType.ByteBits: case DataValueType.WordBits: { int andValue = ((1 << (endBit - startBit + 1)) - 1); int value = data.GetIntValue(valueIndex) & (~(andValue << startBit)); value |= ((i & andValue) << startBit); if (ValueType == DataValueType.ByteBits) { data.SetByteValue(valueIndex, (byte)value); } else { data.SetWordValue(valueIndex, value); } } break; case DataValueType.ByteBit: { int value = data.GetIntValue(valueIndex) & ~(1 << startBit); value |= ((i & 1) << startBit); data.SetByteValue(valueIndex, (byte)value); } break; } }