private static MValue Get([NotNull] FleeceMutableArray array, int index, IThreadSafety threadSafety = null) { return((threadSafety ?? NullThreadSafety.Instance).DoLocked(() => { var val = array.Get(index); if (val.IsEmpty) { throw new IndexOutOfRangeException(); } return val; })); }
public unsafe void TestReadOnlyArray() { var now = DateTimeOffset.UtcNow; var nestedArray = new[] { 1L, 2L, 3L }; var nestedDict = new Dictionary <string, object> { ["foo"] = "bar" }; var masterData = new object[] { 1, "str", nestedArray, now, nestedDict }; var flData = new FLSliceResult(); Db.InBatch(() => { flData = masterData.FLEncode(); }); try { var context = new DocContext(Db, null); using (var mRoot = new MRoot(context)) { mRoot.Context.Should().BeSameAs(context); FLDoc *fleeceDoc = Native.FLDoc_FromResultData(flData, FLTrust.Trusted, Native.c4db_getFLSharedKeys(Db.c4db), FLSlice.Null); var flValue = Native.FLDoc_GetRoot(fleeceDoc); var mArr = new FleeceMutableArray(new MValue(flValue), mRoot); var deserializedArray = new ArrayObject(mArr, false); deserializedArray.GetArray(2).Should().Equal(1L, 2L, 3L); deserializedArray.GetArray(3).Should().BeNull(); deserializedArray.GetBlob(1).Should().BeNull(); deserializedArray.GetDate(3).Should().Be(now); deserializedArray.GetDate(4).Should().Be(DateTimeOffset.MinValue); deserializedArray[1].ToString().Should().Be("str"); deserializedArray.GetString(2).Should().BeNull(); deserializedArray.GetDictionary(4).Should().BeEquivalentTo(nestedDict); deserializedArray[0].Dictionary.Should().BeNull(); var list = deserializedArray.ToList(); list[2].Should().BeAssignableTo <IList <object> >(); list[4].Should().BeAssignableTo <IDictionary <string, object> >(); var mVal = new MValue(); mVal.Dispose(); Native.FLDoc_Release(fleeceDoc); } } finally { Native.FLSliceResult_Release(flData); } var mroot = new MRoot(); }
internal ArrayObject([NotNull] FleeceMutableArray array, bool isMutable) { _array.InitAsCopyOf(array, isMutable); _threadSafety = SetupThreadSafety(); }
private static T GetObject <T>([NotNull] FleeceMutableArray array, int index, IThreadSafety threadSafety = null) where T : class => GetObject(array, index, threadSafety) as T;
private static object GetObject([NotNull] FleeceMutableArray array, int index, IThreadSafety threadSafety = null) => Get(array, index, threadSafety).AsObject(array);
internal MutableArrayObject(FleeceMutableArray array, bool isMutable) { _array.InitAsCopyOf(array, isMutable); }
public Enumerator(FleeceMutableArray parent) { _parent = parent; }