Example #1
0
 /// <summary>
 /// Initializes a new <see cref="AbideTagFile"/>.
 /// </summary>
 public AbideTagFile()
 {
     //Setup
     header = new Header()
     {
         ATagTag = "ATag"
     };
     data = new FixedMemoryMappedStream(new byte[0]);
 }
Example #2
0
        /// <summary>
        /// Loads an Abide Halo 2 Tag file from the specified stream.
        /// </summary>
        /// <param name="inStream">The stream that contains the Abide Halo 2 Tag file.</param>
        /// <exception cref="ArgumentNullException"><paramref name="inStream"/> is null.</exception>
        /// <exception cref="ArgumentException"><paramref name="inStream"/> does not support seeking or reading.</exception>
        /// <exception cref="AbideTagFileException">File failed to open.</exception>
        public void Load(Stream inStream)
        {
            //Check
            if (inStream == null)
            {
                throw new ArgumentNullException(nameof(inStream));
            }
            if (!inStream.CanSeek)
            {
                throw new ArgumentException("Stream does not support seeking.", nameof(inStream));
            }
            if (!inStream.CanRead)
            {
                throw new ArgumentException("Stream does not support reading.", nameof(inStream));
            }

            //Check
            if (inStream.Length >= 16)
            {
                using (BinaryReader reader = new BinaryReader(inStream))
                {
                    //Read
                    header = reader.Read <Header>();

                    //Load Data
                    byte[] buffer = new byte[header.DataLength];
                    inStream.Read(buffer, 0, buffer.Length);

                    //Prepare
                    if (data != null)
                    {
                        data.Dispose();
                    }
                    data = new FixedMemoryMappedStream(buffer, header.MemoryAddress);
                }
            }
            else
            {
                throw new AbideTagFileException("Invalid Abide Tag file.");
            }
        }
Example #3
0
        /// <summary>
        /// Loads an Abide Halo 2 Tag file from the specified Halo 2 Index Entry.
        /// </summary>
        /// <param name="entry">The Halo 2 Index entry to load the Tag from.</param>
        /// <exception cref="ArgumentNullException"><paramref name="entry"/> is null.</exception>
        public void LoadEntry(IndexEntry entry)
        {
            //Check
            if (entry == null)
            {
                throw new ArgumentNullException(nameof(entry));
            }

            //Setup
            header.TagType       = entry.Root;
            header.MemoryAddress = entry.Offset;

            //Read
            byte[] buffer = new byte[entry.Size];
            entry.TagData.Seek(entry.Offset, SeekOrigin.Begin);
            entry.TagData.Read(buffer, 0, buffer.Length);

            //Create
            if (data != null)
            {
                data.Dispose();
            }
            data = new FixedMemoryMappedStream(buffer, entry.Offset);
        }