internal Enumerator(PackedBinaryStream stream, Handle start)
 {
     m_Stream  = stream;
     m_Start   = start;
     m_Current = new Handle {
         Index = -1, Version = -1
     };
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializedObjectReader"/> class based on the specified input stream, output stream and configuration.
        /// </summary>
        /// <param name="input">The input stream.</param>
        /// <param name="output">The output stream.</param>
        /// <param name="configuration">The configuration parameters to use for the reader.</param>
        /// <param name="label">The memory allocator label to use.</param>
        /// <param name="leaveInputOpen">True to leave the input stream open after the reader object is disposed; otherwise, false.</param>
        /// <param name="leaveOutputOpen">True to leave the output stream open after the reader object is disposed; otherwise, false.</param>
        /// <exception cref="ArgumentException">The configuration is invalid.</exception>
        public SerializedObjectReader(Stream input, PackedBinaryStream output, SerializedObjectReaderConfiguration configuration, Allocator label = SerializationConfiguration.DefaultAllocatorLabel, bool leaveInputOpen = true, bool leaveOutputOpen = true)
        {
            if (configuration.BlockBufferSize < 16)
            {
                throw new ArgumentException("BlockBufferSize < 16");
            }

            if (configuration.TokenBufferSize < 16)
            {
                throw new ArgumentException("TokenBufferSize < 16");
            }

            m_LeaveOutputOpen = leaveOutputOpen;
            var blockBufferCharSize = configuration.BlockBufferSize / sizeof(char);

            m_StreamReader = new StreamReader(input, Encoding.UTF8, detectEncodingFromByteOrderMarks: true, bufferSize: configuration.BlockBufferSize, leaveInputOpen);
            m_BlockReader  = configuration.UseReadAsync ? new AsyncBlockReader(m_StreamReader, blockBufferCharSize) : (IBlockReader) new SyncBlockReader(m_StreamReader, blockBufferCharSize);
            m_Tokenizer    = new JsonTokenizer(configuration.TokenBufferSize, configuration.ValidationType, label);
            m_Parser       = new NodeParser(m_Tokenizer, configuration.NodeBufferSize, label);
            m_BinaryStream = output;
            m_BinaryWriter = new PackedBinaryWriter(m_BinaryStream, m_Tokenizer);
        }
 public PackedBinaryWriter(PackedBinaryStream stream, ITokenizer tokenizer)
 {
     m_Stream    = stream;
     m_Tokenizer = tokenizer;
     Seek(0, -1);
 }
 internal SerializedPrimitiveView(PackedBinaryStream stream, Handle handle)
 {
     m_Stream = stream;
     m_Handle = handle;
 }
 internal SerializedArrayView(PackedBinaryStream stream, Handle handle)
 {
     m_Stream = stream;
     m_Handle = handle;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="SerializedObjectReader"/> class based on the specified input stream and output stream.
 /// </summary>
 /// <param name="input">The input stream.</param>
 /// <param name="output">The output stream.</param>
 /// <param name="label">The memory allocator label to use.</param>
 /// <param name="leaveInputOpen">True to leave the input stream open after the reader object is disposed; otherwise, false.</param>
 /// <param name="leaveOutputOpen">True to leave the output stream open after the reader object is disposed; otherwise, false.</param>
 public SerializedObjectReader(Stream input, PackedBinaryStream output, Allocator label = SerializationConfiguration.DefaultAllocatorLabel, bool leaveInputOpen = true, bool leaveOutputOpen = true)
     : this(input, output, SerializedObjectReaderConfiguration.Default, label, leaveInputOpen, leaveOutputOpen)
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="SerializedObjectReader"/> class with the specified path, output stream and configuration.
 /// </summary>
 /// <param name="path">A relative or absolute file path.</param>
 /// <param name="output">The output stream.</param>
 /// <param name="configuration">The configuration parameters to use for the reader.</param>
 /// <param name="label">The memory allocator label to use.</param>
 /// <param name="leaveOutputOpen">True to leave the output stream open after the reader object is disposed; otherwise, false.</param>
 public SerializedObjectReader(string path, PackedBinaryStream output, SerializedObjectReaderConfiguration configuration, Allocator label = SerializationConfiguration.DefaultAllocatorLabel, bool leaveOutputOpen = true)
     : this(OpenFileStreamWithConfiguration(path, configuration), output, configuration, label, false, leaveOutputOpen)
 {
 }