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;
 }