| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 | 
							- using System;
 
- using System.Text;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- namespace FairyGUI.Utils
 
- {
 
-     /// <summary>
 
-     /// 
 
-     /// </summary>
 
-     public class ByteBuffer
 
-     {
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public bool littleEndian;
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public string[] stringTable;
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public int version;
 
-         int _pointer;
 
-         int _offset;
 
-         int _length;
 
-         byte[] _data;
 
-         static byte[] temp = new byte[8];
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="data"></param>
 
-         /// <param name="offset"></param>
 
-         /// <param name="length"></param>
 
-         public ByteBuffer(byte[] data, int offset = 0, int length = -1)
 
-         {
 
-             _data = data;
 
-             _pointer = 0;
 
-             _offset = offset;
 
-             if (length < 0)
 
-                 _length = data.Length - offset;
 
-             else
 
-                 _length = length;
 
-             littleEndian = false;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public int position
 
-         {
 
-             get { return _pointer; }
 
-             set { _pointer = value; }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public int length
 
-         {
 
-             get { return _length; }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public bool bytesAvailable
 
-         {
 
-             get { return _pointer < _length; }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public byte[] buffer
 
-         {
 
-             get { return _data; }
 
-             set
 
-             {
 
-                 _data = value;
 
-                 _pointer = 0;
 
-                 _offset = 0;
 
-                 _length = _data.Length;
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="count"></param>
 
-         /// <returns></returns>
 
-         public int Skip(int count)
 
-         {
 
-             _pointer += count;
 
-             return _pointer;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public byte ReadByte()
 
-         {
 
-             return _data[_offset + _pointer++];
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="output"></param>
 
-         /// <param name="destIndex"></param>
 
-         /// <param name="count"></param>
 
-         /// <returns></returns>
 
-         public byte[] ReadBytes(byte[] output, int destIndex, int count)
 
-         {
 
-             if (count > _length - _pointer)
 
-                 throw new ArgumentOutOfRangeException();
 
-             Array.Copy(_data, _offset + _pointer, output, destIndex, count);
 
-             _pointer += count;
 
-             return output;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="count"></param>
 
-         /// <returns></returns>
 
-         public byte[] ReadBytes(int count)
 
-         {
 
-             if (count > _length - _pointer)
 
-                 throw new ArgumentOutOfRangeException();
 
-             byte[] result = new byte[count];
 
-             Array.Copy(_data, _offset + _pointer, result, 0, count);
 
-             _pointer += count;
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public ByteBuffer ReadBuffer()
 
-         {
 
-             int count = ReadInt();
 
-             ByteBuffer ba = new ByteBuffer(_data, _pointer, count);
 
-             ba.stringTable = stringTable;
 
-             ba.version = version;
 
-             _pointer += count;
 
-             return ba;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public char ReadChar()
 
-         {
 
-             return (char)ReadShort();
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public bool ReadBool()
 
-         {
 
-             bool result = _data[_offset + _pointer] == 1;
 
-             _pointer++;
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public short ReadShort()
 
-         {
 
-             int startIndex = _offset + _pointer;
 
-             _pointer += 2;
 
-             if (littleEndian)
 
-                 return (short)(_data[startIndex] | (_data[startIndex + 1] << 8));
 
-             else
 
-                 return (short)((_data[startIndex] << 8) | _data[startIndex + 1]);
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public ushort ReadUshort()
 
-         {
 
-             return (ushort)ReadShort();
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public int ReadInt()
 
-         {
 
-             int startIndex = _offset + _pointer;
 
-             _pointer += 4;
 
-             if (littleEndian)
 
-                 return (_data[startIndex]) | (_data[startIndex + 1] << 8) | (_data[startIndex + 2] << 16) | (_data[startIndex + 3] << 24);
 
-             else
 
-                 return (_data[startIndex] << 24) | (_data[startIndex + 1] << 16) | (_data[startIndex + 2] << 8) | (_data[startIndex + 3]);
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public uint ReadUint()
 
-         {
 
-             return (uint)ReadInt();
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public float ReadFloat()
 
-         {
 
-             int startIndex = _offset + _pointer;
 
-             _pointer += 4;
 
-             if (littleEndian == BitConverter.IsLittleEndian)
 
-                 return BitConverter.ToSingle(_data, startIndex);
 
-             else
 
-             {
 
-                 temp[3] = _data[startIndex];
 
-                 temp[2] = _data[startIndex + 1];
 
-                 temp[1] = _data[startIndex + 2];
 
-                 temp[0] = _data[startIndex + 3];
 
-                 return BitConverter.ToSingle(temp, 0);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public long ReadLong()
 
-         {
 
-             int startIndex = _offset + _pointer;
 
-             _pointer += 8;
 
-             if (littleEndian)
 
-             {
 
-                 int i1 = (_data[startIndex]) | (_data[startIndex + 1] << 8) | (_data[startIndex + 2] << 16) | (_data[startIndex + 3] << 24);
 
-                 int i2 = (_data[startIndex + 4]) | (_data[startIndex + 5] << 8) | (_data[startIndex + 6] << 16) | (_data[startIndex + 7] << 24);
 
-                 return (uint)i1 | ((long)i2 << 32);
 
-             }
 
-             else
 
-             {
 
-                 int i1 = (_data[startIndex] << 24) | (_data[startIndex + 1] << 16) | (_data[startIndex + 2] << 8) | (_data[startIndex + 3]);
 
-                 int i2 = (_data[startIndex + 4] << 24) | (_data[startIndex + 5] << 16) | (_data[startIndex + 6] << 8) | (_data[startIndex + 7]);
 
-                 return (uint)i2 | ((long)i1 << 32);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public double ReadDouble()
 
-         {
 
-             int startIndex = _offset + _pointer;
 
-             _pointer += 8;
 
-             if (littleEndian == BitConverter.IsLittleEndian)
 
-                 return BitConverter.ToDouble(_data, startIndex);
 
-             else
 
-             {
 
-                 temp[7] = _data[startIndex];
 
-                 temp[6] = _data[startIndex + 1];
 
-                 temp[5] = _data[startIndex + 2];
 
-                 temp[4] = _data[startIndex + 3];
 
-                 temp[3] = _data[startIndex + 4];
 
-                 temp[2] = _data[startIndex + 5];
 
-                 temp[1] = _data[startIndex + 6];
 
-                 temp[0] = _data[startIndex + 7];
 
-                 return BitConverter.ToSingle(temp, 0);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public string ReadString()
 
-         {
 
-             ushort len = ReadUshort();
 
-             string result = Encoding.UTF8.GetString(_data, _offset + _pointer, len);
 
-             _pointer += len;
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="len"></param>
 
-         /// <returns></returns>
 
-         public string ReadString(int len)
 
-         {
 
-             string result = Encoding.UTF8.GetString(_data, _offset + _pointer, len);
 
-             _pointer += len;
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public string ReadS()
 
-         {
 
-             int index = ReadUshort();
 
-             if (index == 65534) //null
 
-                 return null;
 
-             else if (index == 65533)
 
-                 return string.Empty;
 
-             else
 
-                 return stringTable[index];
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="cnt"></param>
 
-         /// <returns></returns>
 
-         public string[] ReadSArray(int cnt)
 
-         {
 
-             string[] ret = new string[cnt];
 
-             for (int i = 0; i < cnt; i++)
 
-                 ret[i] = ReadS();
 
-             return ret;
 
-         }
 
-         private static List<GPathPoint> helperPoints = new List<GPathPoint>();
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="result"></param>
 
-         public List<GPathPoint> ReadPath()
 
-         {
 
-             helperPoints.Clear();
 
-             
 
-             int len = ReadInt();
 
-             if (len == 0)
 
-                 return helperPoints;
 
-             for (int i = 0; i < len; i++)
 
-             {
 
-                 GPathPoint.CurveType curveType = (GPathPoint.CurveType)ReadByte();
 
-                 switch (curveType)
 
-                 {
 
-                     case GPathPoint.CurveType.Bezier:
 
-                         helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0),
 
-                             new Vector3(ReadFloat(), ReadFloat(), 0)));
 
-                         break;
 
-                     case GPathPoint.CurveType.CubicBezier:
 
-                         helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0),
 
-                             new Vector3(ReadFloat(), ReadFloat(), 0),
 
-                             new Vector3(ReadFloat(), ReadFloat(), 0)));
 
-                         break;
 
-                     default:
 
-                         helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0), curveType));
 
-                         break;
 
-                 }
 
-             }
 
-             return helperPoints;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="value"></param>
 
-         public void WriteS(string value)
 
-         {
 
-             int index = ReadUshort();
 
-             if (index != 65534 && index != 65533)
 
-                 stringTable[index] = value;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public Color ReadColor()
 
-         {
 
-             int startIndex = _offset + _pointer;
 
-             byte r = _data[startIndex];
 
-             byte g = _data[startIndex + 1];
 
-             byte b = _data[startIndex + 2];
 
-             byte a = _data[startIndex + 3];
 
-             _pointer += 4;
 
-             return new Color32(r, g, b, a);
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="indexTablePos"></param>
 
-         /// <param name="blockIndex"></param>
 
-         /// <returns></returns>
 
-         public bool Seek(int indexTablePos, int blockIndex)
 
-         {
 
-             int tmp = _pointer;
 
-             _pointer = indexTablePos;
 
-             int segCount = _data[_offset + _pointer++];
 
-             if (blockIndex < segCount)
 
-             {
 
-                 bool useShort = _data[_offset + _pointer++] == 1;
 
-                 int newPos;
 
-                 if (useShort)
 
-                 {
 
-                     _pointer += 2 * blockIndex;
 
-                     newPos = ReadShort();
 
-                 }
 
-                 else
 
-                 {
 
-                     _pointer += 4 * blockIndex;
 
-                     newPos = ReadInt();
 
-                 }
 
-                 if (newPos > 0)
 
-                 {
 
-                     _pointer = indexTablePos + newPos;
 
-                     return true;
 
-                 }
 
-                 else
 
-                 {
 
-                     _pointer = tmp;
 
-                     return false;
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 _pointer = tmp;
 
-                 return false;
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |