public BlittableJsonDocumentBuilder(JsonOperationContext context, UsageMode mode, string debugTag, IJsonParser reader, JsonParserState state)
 {
     _reader   = reader;
     _debugTag = debugTag;
     _stream   = context.GetStream();
     _context  = context;
     _mode     = mode;
     _state    = state;
 }
Exemple #2
0
        public BlittableJsonReaderObject(byte *mem, int size, JsonOperationContext context, UnmanagedWriteBuffer buffer = default(UnmanagedWriteBuffer))
            : base(context)
        {
            if (size == 0)
            {
                ThrowOnZeroSize(size);
            }

            _isRoot = true;
            _buffer = buffer;
            _mem    = mem;  // get beginning of memory pointer
            _size   = size; // get document size

            NoCache = NoCache;

            byte offset;
            var  propOffsetStart = _size - 2;
            var  propsOffset     = ReadVariableSizeIntInReverse(_mem, propOffsetStart, out offset);

            // init document level properties
            SetupPropertiesAccess(mem, propsOffset);

            // get pointer to property names array on document level

            // init root level object properties
            var objStartOffset = ReadVariableSizeIntInReverse(_mem, propOffsetStart - offset, out offset);
            // get offset of beginning of data of the main object
            byte propCountOffset;

            _propCount   = ReadVariableSizeInt(objStartOffset, out propCountOffset); // get main object properties count
            _objStart    = objStartOffset + mem;
            _metadataPtr = objStartOffset + mem + propCountOffset;
            // get pointer to current objects property tags metadata collection

            var currentType = (BlittableJsonToken)(*(mem + size - sizeof(byte)));

            // get current type byte flags

            // analyze main object type and it's offset and propertyIds flags
            _currentOffsetSize     = ProcessTokenOffsetFlags(currentType);
            _currentPropertyIdSize = ProcessTokenPropertyFlags(currentType);
        }