コード例 #1
0
ファイル: JsonObject.cs プロジェクト: XDevelopers/corefxlab
 public     JsonObject this[Utf8Span name]
 {
     get
     {
         if (TryGetValue(name, out JsonObject value))
         {
             return(value);
         }
         JsonThrowHelper.ThrowKeyNotFoundException();
         return(default);
コード例 #2
0
        public bool TryGetValue(string propertyName, out JsonObject value)
        {
            var record = GetRecord(0);

            if (record.Length == 0)
            {
                JsonThrowHelper.ThrowKeyNotFoundException();
            }

            if (record.Type != JsonValueType.Object)
            {
                JsonThrowHelper.ThrowInvalidOperationException();
            }

            for (int i = DbRow.Size; i < _database.Length; i += DbRow.Size)
            {
                record = MemoryMarshal.Read <DbRow>(_database.Slice(i));

                if (!record.IsSimpleValue)
                {
                    i += record.Length * DbRow.Size;
                    continue;
                }

                if (new Utf8Span(_jsonData.Slice(record.Location, record.Length)) == propertyName)
                {
                    int newStart = i + DbRow.Size;
                    int newEnd   = newStart + DbRow.Size;

                    record = MemoryMarshal.Read <DbRow>(_database.Slice(newStart));

                    if (!record.IsSimpleValue)
                    {
                        newEnd = newEnd + DbRow.Size * record.Length;
                    }

                    value = new JsonObject(_jsonData, _database.Slice(newStart, newEnd - newStart));
                    return(true);
                }

                var valueType = MemoryMarshal.Read <JsonValueType>(_database.Slice(i + DbRow.Size + 8));
                if (valueType != JsonValueType.Object && valueType != JsonValueType.Array)
                {
                    i += DbRow.Size;
                }
            }

            value = default;
            return(false);
        }
コード例 #3
0
        public bool TryGetValue(Utf8Span propertyName, out JsonObject value)
        {
            DbRow record = GetRecord(0);

            if (record.Length == 0)
            {
                JsonThrowHelper.ThrowKeyNotFoundException();
            }
            if (record.Type != JsonValueType.Object)
            {
                JsonThrowHelper.ThrowInvalidOperationException();
            }

            for (int i = DbRow.Size; i <= _database.Length; i += DbRow.Size)
            {
                record = GetRecord(i);

                if (!record.IsSimpleValue)
                {
                    i += record.Length * DbRow.Size;
                    continue;
                }

                if (_jsonData.Slice(record.Location, record.Length).SequenceEqual(propertyName.Bytes))
                {
                    int newStart = i + DbRow.Size;

                    record = GetRecord(newStart);

                    int newEnd = record.IsSimpleValue ? i + 2 * DbRow.Size : i + (record.Length + 2) * DbRow.Size;

                    value = new JsonObject(_jsonData, _database.Slice(newStart, newEnd - newStart));
                    return(true);
                }

                JsonValueType valueType = GetType(i + DbRow.Size);
                if (valueType > JsonValueType.Array)
                {
                    i += DbRow.Size;
                }
            }

            value = default;
            return(false);
        }