/// <summary>
        /// Instantiate FeaturesInFeatureOut fusion strategy by providing other fusion strategies whose output would be used as an input for this fusion.
        /// </summary>
        /// <param name="fusionStrategies"></param>
        public FeaturesInFeatureOut(List <IFusionStrategy> fusionStrategies)
        {
            FeatureBuffer    = new CoreBuffer <double[]>(OnBufferFinished, fusionStrategies.Count);
            FusionStrategies = fusionStrategies;
            int TmpIndex = 0;

            FusionStrategies.ForEach((IFusionStrategy fusionStrategy) =>
            {
                fusionStrategy.Id = TmpIndex;
                TmpIndex++;
                fusionStrategy.OnFusionFinished = ((dynamic output) =>
                {
                    FeatureBuffer.Push(((List <double>)output).ToArray(), fusionStrategy.Id);

                    /*if (IFusionStrategyFinished == FusionStrategies.Count)
                     * {
                     *  if(FusionStrategies.Count == 1)
                     *  {
                     *      FeatureVector = output;
                     *  }
                     *  Fuse();
                     * }
                     * else
                     * {
                     *  FeatureVector.AddRange(output);
                     *  IFusionStrategyFinished++;
                     * }*/
                });
            });
        }
 /// <summary>
 /// Instantiate FeaturesInFeatureOut fusion strategy by setting important configurations.
 /// </summary>
 /// <param name="data">Data to be fuse.</param>
 public FeaturesInFeatureOut(List <double[]> data)
 {
     Data          = data;
     StartReading  = Fuse;
     StopReading   = Empty;
     FeatureBuffer = new CoreBuffer <double[]>(OnBufferFinished, 1);
 }
 /// <summary>
 /// Instantiate FeaturesInFeatureOut fusion strategy by setting the reader.
 /// </summary>
 /// <param name="reader">Reader to be used.</param>
 public FeaturesInFeatureOut(IReader reader)
 {
     DataReader = reader;
     DataReader.OnReadFinished = OnReadFinished;
     StartReading  = DataReader.Start;
     StopReading   = DataReader.Stop;
     FeatureBuffer = new CoreBuffer <double[]>(OnBufferFinished, 1);
 }