Ejemplo n.º 1
0
        public void SimpleArrayDocument()
        {
            using (var context = new JsonOperationContext(1024, 1024 * 4, SharedMultipleUseFlag.None))
            {
                using (var builder = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(context))
                {
                    builder.Reset(BlittableJsonDocumentBuilder.UsageMode.None);
                    builder.StartArrayDocument();

                    builder.StartWriteArray();
                    {
                        for (var i = 0; i < 8; i++)
                        {
                            builder.WriteValue(i);
                        }
                        builder.WriteArrayEnd();
                    }
                    builder.FinalizeDocument();

                    var reader = builder.CreateArrayReader();

                    Assert.Equal(8, reader.Length);

                    for (var i = 0; i < 8; i++)
                    {
                        Assert.Equal(i, int.Parse(reader[i].ToString(), CultureInfo.InvariantCulture));
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private bool TryHandleArrayValue(int index, Dictionary <string, object> result, KeyValuePair <string, BlittableJsonReaderArray> prop)
        {
            var arrays = new List <BlittableJsonReaderArray>
            {
                prop.Value
            };

            for (var i = 0; i < _docs.Length; i++)
            {
                if (i == index)
                {
                    continue;
                }

                if (_docs[i].TryGetWithoutThrowingOnError(prop.Key, out BlittableJsonReaderArray token) == false)
                {
                    return(false);
                }
                if (token == null)
                {
                    continue;
                }
                arrays.Add(token);
            }

            var set        = new HashSet <Tuple <object, BlittableJsonToken> >();
            var lastLength = arrays[0].Length;
            var sameSize   = true;

            foreach (var arr in arrays)
            {
                sameSize = arr.Length == lastLength;
                for (var propIndex = 0; propIndex < arr.Length; propIndex++)
                {
                    var tuple = arr.GetValueTokenTupleByIndex(propIndex);
                    set.Add(tuple);
                }
            }
            BlittableJsonReaderArray reader;

            using (var mergedArray = new ManualBlittableJsonDocumentBuilder <UnmanagedWriteBuffer>(_context))
            {
                mergedArray.Reset(BlittableJsonDocumentBuilder.UsageMode.None);
                mergedArray.StartArrayDocument();
                mergedArray.StartWriteArray();
                foreach (var item in set)
                {
                    mergedArray.WriteValue(item.Item2, item.Item1);
                }
                mergedArray.WriteArrayEnd();
                mergedArray.FinalizeDocument();
                reader = mergedArray.CreateArrayReader();
            }

            if (sameSize && prop.Value.Equals(reader))
            {
                result.Add(prop.Key, reader);
                return(true);
            }

            result.Add(prop.Key, new ArrayWithWarning(reader));
            return(true);
        }