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)); } } } }
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); }