forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using FishNet.Documenting;
 | 
						|
using System;
 | 
						|
using System.Text;
 | 
						|
 | 
						|
namespace FishNet.Serializing
 | 
						|
{
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Writes data to a buffer.
 | 
						|
    /// </summary>
 | 
						|
    [APIExclude]
 | 
						|
    internal class WriterStatics
 | 
						|
    {
 | 
						|
        /* Since serializing occurs on the main thread this value may
 | 
						|
        * be shared among all writers. //multithread
 | 
						|
        */
 | 
						|
 | 
						|
        #region Private.
 | 
						|
        /// <summary>
 | 
						|
        /// Encoder for strings.
 | 
						|
        /// </summary>
 | 
						|
        private static readonly UTF8Encoding _encoding = new UTF8Encoding(false, true);
 | 
						|
        /// <summary>
 | 
						|
        /// StringBuffer to use with encoding.
 | 
						|
        /// </summary>
 | 
						|
        private static byte[] _stringBuffer = new byte[64];
 | 
						|
        #endregion
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the string buffer ensuring proper length, and outputs size in bytes of string.
 | 
						|
        /// </summary>
 | 
						|
        public static byte[] GetStringBuffer(string str, out int size)
 | 
						|
        {
 | 
						|
            int strLength = str.Length;
 | 
						|
            int valueMaxBytes = _encoding.GetMaxByteCount(strLength);
 | 
						|
            if (valueMaxBytes >= _stringBuffer.Length)
 | 
						|
            {
 | 
						|
                int nextSize = (_stringBuffer.Length * 2) + valueMaxBytes;
 | 
						|
                Array.Resize(ref _stringBuffer, nextSize);
 | 
						|
            }
 | 
						|
 | 
						|
            size = _encoding.GetBytes(str, 0, strLength, _stringBuffer, 0);
 | 
						|
            return _stringBuffer;
 | 
						|
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Ensures the string buffer is of a minimum length and returns the buffer.
 | 
						|
        /// </summary>
 | 
						|
        public static byte[] GetStringBuffer(string str)
 | 
						|
        {
 | 
						|
            int valueMaxBytes = _encoding.GetMaxByteCount(str.Length);
 | 
						|
            if (valueMaxBytes >= _stringBuffer.Length)
 | 
						|
            {
 | 
						|
                int nextSize = (_stringBuffer.Length * 2) + valueMaxBytes;
 | 
						|
                Array.Resize(ref _stringBuffer, nextSize);
 | 
						|
            }
 | 
						|
 | 
						|
            return _stringBuffer;
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |