示例#1
0
 public BsaReader(MemoryMappedFile mmf, CompressionOptions options)
 {
     _mmf     = mmf;
     Settings = new ArchiveSettings {
         Options = options
     };
 }
示例#2
0
        private Bsa(BsaReader bsaReader)
            : base(bsaReader.Read(), BsaHashComparer.Instance)
        {
            Settings = bsaReader.Settings;

            _bsaReader = bsaReader;
        }
示例#3
0
        internal BsaFile(string path, string name, ArchiveSettings settings, FileRecord baseRec, Func <uint, uint, BinaryReader> createReader)
            : this(path, name, settings, baseRec)
        {
            if (Size == 0 || (Size <= 4 && IsCompressed))
            {
                _readyData   = new byte[0];
                OriginalSize = 0;
            }

            uint offset = _settings.BStringPrefixed ? (uint)Filename.Length + 1 : 0;

            _lazyData = new Lazy <byte[]>(() =>
            {
                using (var reader = createReader(offset, Size - offset))
                {
                    if (IsCompressed)
                    {
                        _originalSize = reader.ReadUInt32();
                        offset       += sizeof(uint);
                    }

                    return(reader.ReadBytes((int)(Size - offset)));
                }
            });
        }
示例#4
0
        private BsaFile(string path, string name, ArchiveSettings settings)
            : this(path, name)
        {
            _settings = settings;

            CheckCompressionSettings();

            if (Strategy.HasFlag(CompressionStrategy.Aggressive))
            {
                throw new NotImplementedException("CompressionStrategy.Aggressive");
            }
        }
示例#5
0
        private BsaFile(string path, string name, ArchiveSettings settings, FileRecord baseRec)
            : this(path, name, settings)
        {
            bool compressBitSet = (baseRec.size & FlagCompress) != 0;

            if (compressBitSet)
            {
                baseRec.size ^= FlagCompress;
            }

            IsCompressed = CheckCompressed(compressBitSet);
            Size         = baseRec.size;
        }
示例#6
0
        //Clone ctor
        private BsaFile(string path, string name, ArchiveSettings settings, byte[] readyData, Lazy <byte[]> lazyData, bool isCompressed, uint originalSize, uint size)
            : this(path, name)
        {
            _settings = settings;

            _readyData = readyData;
            _lazyData  = lazyData;

            IsCompressed = isCompressed;

            OriginalSize = originalSize;
            Size         = size;

            CheckCompressionSettings();
        }
示例#7
0
 public BsaReader(MemoryMappedFile mmf, CompressionOptions options)
 {
     _mmf = mmf;
     Settings = new ArchiveSettings { Options = options };
 }
示例#8
0
 /// <summary>
 /// Creates an empty BSAWrapper instance that can be modified and saved to a BSA file
 /// </summary>
 public Bsa(ArchiveSettings settings)
     : base(BsaHashComparer.Instance)
 {
     Settings = settings;
 }
示例#9
0
 /// <summary>
 /// Creates a new BSAWrapper instance from an existing folder structure
 /// </summary>
 /// <param name="packFolder">The path of the folder to pack</param>
 /// <param name="settings">The archive settings used during packing</param>
 public Bsa(string packFolder, ArchiveSettings settings)
     : this(settings)
 {
     Pack(packFolder);
 }
示例#10
0
 public BsaFile(string path, string name, ArchiveSettings settings, byte[] data, bool inputCompressed)
     : this(path, name, settings)
 {
     //inputCompressed param specifies compression of data param, NOT final result!
     UpdateData(data, inputCompressed);
 }