public BooleanFunctionAnalytic(int inputNumberOfDigits, int outputNumberOfDigits, string [] boolFunctions)
     : base(inputNumberOfDigits, outputNumberOfDigits)
 {
     if (boolFunctions.Length != outputNumberOfDigits)
     {
         throw new Exception("Error! Number of boolean fuctions !=  number output digits");
     }
     _boolFunction = new AnalyticFunctionBuilder(boolFunctions);
 }
        // return f(i-th operand)
        public override BitArray GetResultByLineIndex(ulong index)
        {
            BitArray operand  = new BitArray(_inputNumberOfDigits);
            BitArray bitIndex = new BitArray(BitConverter.GetBytes(index));

            // maybe bitIndex size != inputNumberOfDigits, so we copy bits in
            // array with correct size
            for (int i = 0; i < operand.Length; i++)
            {
                operand[i] = bitIndex[i];
            }
            var result = new BitArray(OutputNumberOfDigits, false);

            for (int i = 0; i < result.Length; i++)
            {
                result[i] = _boolFunction[i](operand);
            }
            return(result);
        }