Example #1
0
        /// <summary>
        ///   Aggregates all the supplied FILES into THE FIRST file (marking it as a TEMP file) using the supplied combineF
        ///   action to merge all the individual files into 1 combined output file.
        /// </summary>
        /// <remarks>
        ///   The first file is renamed to the resultFileNameTemplate, marked as a TEMP file and updated in place on the
        ///   file system.  This is more efficient because we do not make a copy of the first file, we rename the first file and
        ///   UPDATE IT IN PLACE.  This results in less file IO, which improves performance for large files.
        /// </remarks>
        /// <param name="files">The sequence of files to combine into 1 file.</param>
        /// <param name="resultFileNameTemplate">The template string to use for the name of the combined file.</param>
        /// <param name="combineF">
        ///   Action to combine 2 files into 1.
        ///   combineF :: (accumulator: TempFile, inputFile: TempFile) -> unit.
        /// </param>
        /// <returns>A TempFile instance for the new combined file.</returns>
        public TempFile AggregateFilesIntoFirstAsTemp(IEnumerable <TempFile> files, string resultFileNameTemplate, Action <TempFile, TempFile> combineF)
        {
            if (files.IsEmpty())
            {
                TempFile accumulatorFile = NewTempFile(resultFileNameTemplate);
                accumulatorFile.CreateIfNotExists();
                return(accumulatorFile);
            }

            if (files.Count() == 1)
            {
                TempFile accumulatorFile = files.Single();
                accumulatorFile.Rename(resultFileNameTemplate);
                accumulatorFile.MakeTemporary();

                return(accumulatorFile);
            }

            {
                TempFile accumulatorFile = files.First();
                accumulatorFile.Rename(resultFileNameTemplate);
                accumulatorFile.MakeTemporary();

                files.Skip(1).Each(file => combineF(accumulatorFile, file));

                return(accumulatorFile);
            }
        }
Example #2
0
        /// <summary>
        ///   Aggregates all the supplied FILES into a separate TEMP file using the supplied combineF action to merge all
        ///   the individual files into 1 combined output file.
        /// </summary>
        /// <param name="files">The sequence of files to combine into 1 file.</param>
        /// <param name="resultFileNameTemplate">The template string to use for the name of the combined file.</param>
        /// <param name="combineF">
        ///   Action to combine 2 files into 1.
        ///   combineF :: (accumulator: TempFile, inputFile: TempFile) -> unit.
        /// </param>
        /// <returns>A TempFile instance for the new combined file.</returns>
        public TempFile AggregateFilesIntoTemp(IEnumerable <TempFile> files, string resultFileNameTemplate, Action <TempFile, TempFile> combineF)
        {
            TempFile accumulatorFile = NewTempFile(resultFileNameTemplate);

            if (files.IsEmpty())
            {
                accumulatorFile.CreateIfNotExists();
                return(accumulatorFile);
            }

            if (files.Count() == 1)
            {
                files.First().CopyTo(accumulatorFile);
                return(accumulatorFile);
            }

            TempFile firstFile = files.ElementAt(0);

            firstFile.CopyTo(accumulatorFile);

            files.Skip(1)
            .ToList()
            .ForEach(file => combineF(accumulatorFile, file));

            return(accumulatorFile);
        }
Example #3
0
        public TempFile AggregateFilesInto(IEnumerable <TempFile> files, TempFile accumulatorFile, Action <TempFile, IEnumerable <TempFile> > combineF)
        {
            if (files.IsEmpty())
            {
                accumulatorFile.CreateIfNotExists();
                return(accumulatorFile);
            }

            if (files.Count() == 1)
            {
                files.First().CopyTo(accumulatorFile);
                return(accumulatorFile);
            }

            combineF(accumulatorFile, files);
            return(accumulatorFile);
        }
Example #4
0
        public TempFile AggregateFilesIntoPerma(IEnumerable <TempFile> files, string resultFileNameTemplate, Action <TempFile, IEnumerable <TempFile> > combineF)
        {
            TempFile accumulatorFile = NewPermaFile(resultFileNameTemplate);

            if (files.IsEmpty())
            {
                accumulatorFile.CreateIfNotExists();
                return(accumulatorFile);
            }

            if (files.Count() == 1)
            {
                files.First().CopyTo(accumulatorFile);
                return(accumulatorFile);
            }

            combineF(accumulatorFile, files);
            return(accumulatorFile);
        }