예제 #1
0
 private static void WriteIntBigEndian(this IByteWriter writer, int value)
 {
     writer.WriteByte((byte)(value >> 24));
     writer.WriteByte((byte)(value >> 16));
     writer.WriteByte((byte)(value >> 8));
     writer.WriteByte((byte)(value));
 }
예제 #2
0
 public void WriteTo(IByteWriter writer)
 {
     writer.WriteLong();
     writer.WriteUnicodeString(FileName); // UUID (filename)
     writer.WriteUnicodeString(Name);     // Name (itemname)
     writer.WriteByte();
     writer.WriteInt();
     writer.WriteLong(AccountId);       // AccountId
     writer.WriteLong(CharacterId);     // CharacterId
     writer.WriteUnicodeString(Author); // CharacterName
     writer.WriteLong(CreationTime);    // CreationTime
     writer.WriteUnicodeString(Url);    // URL (no domain)
     writer.WriteByte();
 }
            protected override void Given()
            {
                _byteWriter = A.Fake <Protocol.IByteWriter>();
                A.CallTo(() => _byteWriter.WriteByte(A <byte> .Ignored))
                .Invokes((byte @byte) => _byteWritten = @byte);

                _writer = new BitWriter(_byteWriter);
            }
예제 #4
0
        public void Flush()
        {
            if (_values.Any() == false)
            {
                return;
            }

            var result = 0;

            for (var i = 0; i < _values.Count; i++)
            {
                result |= (_values[i] ? 1 : 0) << i;
            }

            _values.Clear();
            _writer.WriteByte((byte)result);
        }
예제 #5
0
            private byte WriteData(int index, IByteWriter writer)
            {
                _buffer.Clear();

                while (true)
                {
                    var entry = _table[index];
                    _buffer.Add(entry.Value);
                    index = entry.PrefixIndex;
                    if (index != -1)
                    {
                        continue;
                    }

                    foreach (var dataByte in _buffer.AsEnumerable().Reverse())
                    {
                        writer.WriteByte(dataByte);
                    }

                    return(_buffer.Last());
                }
            }
예제 #6
0
            public bool ProcessNextCode(int code, IByteWriter writer, out bool reset)
            {
                reset = false;

                if (code == _resetTable)
                {
                    reset = true;
                    Reset();
                }
                else if (code == _endOfStream)
                {
                    return(false);
                }
                else if (_oldCode == -1)
                {
                    WriteData(code, writer);
                    _oldCode = code;
                }
                else if (code < Count)
                {
                    var fbyte = WriteData(code, writer);

                    Add(_oldCode, fbyte);
                    _oldCode = code;
                }
                else
                {
                    var fbyte = WriteData(_oldCode, writer);
                    writer.WriteByte(fbyte);

                    Add(_oldCode, fbyte);
                    _oldCode = code;
                }

                return(true);
            }