Пример #1
0
        public TagIndex(CacheStream cache, IReadOnlyList <string> paths)
            : base(cache)
        {
            var binaryReader = new BinaryReader(cache);

            _classes = new List <TagClassHeirarchy>(new TagClassHeirarchy[classArrayCount]);
            for (var i = 0; i < classArrayCount; i++)
            {
                _classes[i] = new TagClassHeirarchy(binaryReader.ReadTagClass(), binaryReader.ReadTagClass(),
                                                    binaryReader.ReadTagClass());
            }

            _data = new List <TagDatum>(new TagDatum[datumArrayCount]);
            var cacheKey = CacheKey.Create(cache);

            for (var i = 0; i < datumArrayCount && i < paths.Count; i++)
            {
                TagDatum data;
                do
                {
                    data = new TagDatum
                    {
                        Class          = binaryReader.ReadTagClass( ),
                        Identifier     = binaryReader.ReadTagIdent( ),
                        VirtualAddress = binaryReader.ReadInt32( ),
                        Length         = binaryReader.ReadInt32( ),
                        CacheKey       = cacheKey
                    };
                } while (TagDatum.IsNull(data));
                data.Path = paths[i];
                _data[i]  = data;
            }
        }
Пример #2
0
        public static CacheStream Save(CacheStream map)
        {
            var filename   = Path.Combine(Local.MapsDirectory, @"temp.map");
            var copyStream = new FileStream(filename, FileMode.Create,
                                            FileAccess.Write, FileShare.ReadWrite, 4 * 1024, FileOptions.SequentialScan);

            using (copyStream)
                using ( map )
                {
                    map.SaveTo(copyStream);
                }
            File.Delete(map.Name);
            File.Move(filename, map.Name);
            return(new CacheStream(map.Name));
        }
Пример #3
0
        protected TagIndexBase(CacheStream cache)
        {
            var binaryReader = new BinaryReader(cache);

            classArrayAddress = binaryReader.ReadInt32();
            classArrayCount   = binaryReader.ReadInt32();
            datumArrayAddress = binaryReader.ReadInt32();
            ScenarioIdent     = binaryReader.ReadTagIdent();
            GlobalsIdent      = binaryReader.ReadTagIdent();
            _noodleValue      = binaryReader.ReadInt32();
            datumArrayCount   = binaryReader.ReadInt32();
            fourCC            = binaryReader.ReadTagClass();
            if (fourCC != new TagClass("tags"))
            {
                throw new InvalidDataException();
            }
        }
Пример #4
0
        internal static CacheStream SaveAs(CacheStream map, string destFileName)
        {
            var filename   = Path.Combine(Local.MapsDirectory, @"temp.map");
            var copyStream = new FileStream(filename, FileMode.Create,
                                            FileAccess.Write, FileShare.ReadWrite, 4 * 1024, FileOptions.SequentialScan);

            using (copyStream)
                using ( map )
                {
                    map.SaveTo(copyStream);
                    map.Sign( );
                }
            if (File.Exists(destFileName))
            {
                File.Delete(destFileName);
            }
            File.Move(filename, destFileName);
            return(new CacheStream(destFileName));
        }
Пример #5
0
 public CacheWriter(CacheStream stream)
 {
     cacheStream = stream;
 }