コード例 #1
0
        public byte[] FinalizeAndGetBinaryData()
        {
            BinaryWriter binaryWriter = BinaryWriterFactory.GetBinaryWriter();

            binaryWriter.WriteInt(this._folderCount);
            for (int index = 0; index < this._folderCount; ++index)
            {
                SaveEntryFolder     folder         = this._folders[index];
                int                 parentGlobalId = folder.ParentGlobalId;
                int                 globalId       = folder.GlobalId;
                int                 localId        = folder.FolderId.LocalId;
                SaveFolderExtension extension      = folder.FolderId.Extension;
                binaryWriter.Write3ByteInt(parentGlobalId);
                binaryWriter.Write3ByteInt(globalId);
                binaryWriter.Write3ByteInt(localId);
                binaryWriter.WriteByte((byte)extension);
            }
            binaryWriter.WriteInt(this._entryCount);
            binaryWriter.AppendData(this._writer);
            byte[] data = binaryWriter.Data;
            BinaryWriterFactory.ReleaseBinaryWriter(binaryWriter);
            BinaryWriterFactory.ReleaseBinaryWriter(this._writer);
            this._writer = (BinaryWriter)null;
            return(data);
        }
コード例 #2
0
 public void SerializeFolder(SaveEntryFolder folder)
 {
     foreach (SaveEntry allEntry in folder.AllEntries)
     {
         this.SerializeEntry(allEntry);
     }
 }
コード例 #3
0
 public SaveEntryFolder(
     SaveEntryFolder parent,
     int globalId,
     FolderId folderId,
     int entryCount)
     : this(parent.GlobalId, globalId, folderId, entryCount)
 {
 }
コード例 #4
0
        public SaveEntryFolder CreateFolder(
            SaveEntryFolder parentFolder,
            FolderId folderId,
            int entryCount)
        {
            int             globalId        = Interlocked.Increment(ref this._folderCount) - 1;
            SaveEntryFolder saveEntryFolder = new SaveEntryFolder(parentFolder, globalId, folderId, entryCount);

            parentFolder.AddChildFolderEntry(saveEntryFolder);
            this._folders.Add(saveEntryFolder);
            return(saveEntryFolder);
        }
コード例 #5
0
        public SaveEntryFolder CreateFolder(
            SaveEntryFolder parentFolder,
            FolderId folderId,
            int entryCount)
        {
            int folderCount = this._folderCount;

            ++this._folderCount;
            SaveEntryFolder saveEntryFolder = new SaveEntryFolder(parentFolder, folderCount, folderId, entryCount);

            parentFolder.AddChildFolderEntry(saveEntryFolder);
            this._folders.Add(saveEntryFolder);
            return(saveEntryFolder);
        }
コード例 #6
0
        public void SerializeFolderConcurrent(SaveEntryFolder folder)
        {
            int          managedThreadId = Thread.CurrentThread.ManagedThreadId;
            BinaryWriter writer;

            lock (this._locker)
            {
                if (!this._writers.TryGetValue(managedThreadId, out writer))
                {
                    writer = new BinaryWriter(262144);
                    this._writers.Add(managedThreadId, writer);
                }
            }
            foreach (SaveEntry allEntry in folder.AllEntries)
            {
                this.SerializeEntryConcurrent(allEntry, writer);
            }
        }
コード例 #7
0
 public static SaveEntry CreateNew(SaveEntryFolder parentFolder, EntryId entryId) => new SaveEntry()
 {
     Id       = entryId,
     FolderId = parentFolder.GlobalId
 };
コード例 #8
0
 public void AddChildFolderEntry(SaveEntryFolder saveEntryFolder) => this._saveEntryFolders.Add(saveEntryFolder.FolderId, saveEntryFolder);