public static UlongTritTouple TritsToUlong(int[] input, int length) { var result = new UlongTritTouple(new ulong[length], new ulong[length]); for (var i = 0; i < input.Length; i++) { switch (input[i]) { case 0: result.Low[i] = ulong.MaxValue; result.High[i] = ulong.MaxValue; break; case 1: result.Low[i] = Min; result.High[i] = ulong.MaxValue; break; default: result.Low[i] = ulong.MaxValue; result.High[i] = Min; break; } } if (input.Length >= length) { return(result); } for (var i = input.Length; i < length; i++) { result.Low[i] = ulong.MaxValue; result.High[i] = ulong.MaxValue; } return(result); }
/// <summary> /// The trits to ulong. /// </summary> /// <param name="input"> /// The input. /// </param> /// <param name="length"> /// The length. /// </param> /// <param name="mode"> /// The mode. /// </param> /// <returns> /// The <see cref="UlongTritTouple"/>. /// </returns> public static UlongTritTouple TritsToUlong(int[] input, int length, Mode mode) { var max = mode == Mode._32bit ? int.MaxValue : ulong.MaxValue; var result = new UlongTritTouple(new ulong[length], new ulong[length]); for (var i = 0; i < input.Length; i++) { switch (input[i]) { case 0: result.Low[i] = max; result.High[i] = max; break; case 1: result.Low[i] = Min; result.High[i] = max; break; default: result.Low[i] = max; result.High[i] = Min; break; } } if (input.Length < length) { for (var i = input.Length; i < length; i++) { result.Low[i] = max; result.High[i] = max; } } return(result); }
/// <summary> /// Initializes a new instance of the <see cref="TrinaryDemultiplexer"/> class. /// </summary> /// <param name="ulongTrits"> /// The ulong trits. /// </param> public TrinaryDemultiplexer(UlongTritTouple ulongTrits) { this.UlongTrits = ulongTrits; }