using System;
using System.IO;

namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
{
    /// <summary>
    /// Output streams for the disk shader cache.
    /// </summary>
    class DiskCacheOutputStreams : IDisposable
    {
        /// <summary>
        /// Shared table of contents (TOC) file stream.
        /// </summary>
        public readonly FileStream TocFileStream;

        /// <summary>
        /// Shared data file stream.
        /// </summary>
        public readonly FileStream DataFileStream;

        /// <summary>
        /// Host table of contents (TOC) file stream.
        /// </summary>
        public readonly FileStream HostTocFileStream;

        /// <summary>
        /// Host data file stream.
        /// </summary>
        public readonly FileStream HostDataFileStream;

        /// <summary>
        /// Creates a new instance of a disk cache output stream container.
        /// </summary>
        /// <param name="tocFileStream">Stream for the shared table of contents file</param>
        /// <param name="dataFileStream">Stream for the shared data file</param>
        /// <param name="hostTocFileStream">Stream for the host table of contents file</param>
        /// <param name="hostDataFileStream">Stream for the host data file</param>
        public DiskCacheOutputStreams(FileStream tocFileStream, FileStream dataFileStream, FileStream hostTocFileStream, FileStream hostDataFileStream)
        {
            TocFileStream = tocFileStream;
            DataFileStream = dataFileStream;
            HostTocFileStream = hostTocFileStream;
            HostDataFileStream = hostDataFileStream;
        }

        /// <summary>
        /// Disposes the output file streams.
        /// </summary>
        public void Dispose()
        {
            TocFileStream.Dispose();
            DataFileStream.Dispose();
            HostTocFileStream.Dispose();
            HostDataFileStream.Dispose();
        }
    }
}