Beispiel #1
0
        internal void DirectoryWrite(string str, WzArchiveItemType type, WzArchiveItemType cachetype)
        {
            bool cacheable = false;
            bool hascache  = this.mRefTable.ContainsKey(str);
            long org       = this.mStream.Tell(true);

            if (hascache)
            {
                this.mStream.Seek(this.mRefTable[str], true);
                cacheable = this.mStream.Read1u() == (byte)type;
                this.mStream.Seek(org, true);
            }

            this.mStream.Write1u((byte)(cacheable ? cachetype : type));

            if (cacheable)
            {
                this.mStream.Write4u(this.mRefTable[str]);
            }
            else
            {
                this.mRefTable.Add(str, (uint)org);
                SerializeString.Write(this.mStream, str);
            }
        }
Beispiel #2
0
        /// <summary> 寫入一串序列化文字。如果池裡已經存在相同的字串,則會以快取的形式寫入  </summary>
        /// <param name="str"> </param>
        /// <param name="readsign"> 表示需要從資料流讀取的標記 </param>
        /// <param name="refsign"> 表示需要從池裡讀取的標記 </param>
        public void Write(string str, byte readsign, byte refsign)
        {
            if (str == null)
            {
                str = "";
            }

            bool cacheable = this.mRefTable.ContainsKey(str);

            this.mStream.Write1u(cacheable ? refsign : readsign);

            if (cacheable)
            {
                this.mStream.Write4u(this.mRefTable[str]);
            }
            else
            {
                this.mRefTable.Add(str, (uint)(this.mStream.Tell(true)));
                SerializeString.Write(this.mStream, str);
            }
        }