private void BeginArray(FLArray *a) { FLArrayIterator i; Native.FLArrayIterator_Begin(a, &i); _sequenceStack.Push(i); }
public static extern bool FLArray_IsEmpty(FLArray *array);
public static extern uint FLArray_Count(FLArray *array);
private uint InsertDocs(FLArray *docs) { var typeKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Track Type"), true); var idKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Persistent ID"), true); var nameKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Name"), true); var albumKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Album"), true); var artistKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Artist"), true); var timeKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Total Time"), true); var genreKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Genre"), true); var yearKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Year"), true); var trackNoKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Track Number"), true); var compKey = NativeRaw.FLDictKey_Init(FLSlice.Constant("Compilation"), true); LiteCoreBridge.Check(err => Native.c4db_beginTransaction(Db, err)); try { var enc = Native.FLEncoder_New(); FLArrayIterator iter; Native.FLArrayIterator_Begin(docs, &iter); uint numDocs = 0; while (Native.FLArrayIterator_Next(&iter)) { // Check that track is correct type: var track = Native.FLValue_AsDict(Native.FLArrayIterator_GetValue(&iter)); var trackType = NativeRaw.FLValue_AsString(Native.FLDict_GetWithKey(track, &typeKey)); if (!trackType.Equals(FLSlice.Constant("File")) && !trackType.Equals(FLSlice.Constant("Remote"))) { continue; } var trackID = NativeRaw.FLValue_AsString(Native.FLDict_GetWithKey(track, &idKey)); ((long)trackID.buf).Should().NotBe(0, "because otherwise the data was not read correctly"); // Encode doc body: Native.FLEncoder_BeginDict(enc, 0); CopyValue(track, &nameKey, enc).Should().BeTrue("because otherwise the copy failed"); CopyValue(track, &albumKey, enc); CopyValue(track, &artistKey, enc); CopyValue(track, &timeKey, enc); CopyValue(track, &genreKey, enc); CopyValue(track, &yearKey, enc); CopyValue(track, &trackNoKey, enc); CopyValue(track, &compKey, enc); Native.FLEncoder_EndDict(enc); FLError err; var body = NativeRaw.FLEncoder_Finish(enc, &err); body.Should().NotBeNull("because otherwise the encoding process failed"); Native.FLEncoder_Reset(enc); // Save Document: var rq = new C4DocPutRequest(); rq.docID = (C4Slice)trackID; rq.body = body; rq.save = true; var doc = (C4Document *)LiteCoreBridge.Check(c4err => { var localRq = rq; return(Native.c4doc_put(Db, &localRq, null, c4err)); }); Native.c4doc_free(doc); ++numDocs; } Native.FLEncoder_Free(enc); return(numDocs); } finally { LiteCoreBridge.Check(err => Native.c4db_endTransaction(Db, true, err)); } }
public static extern FLMutableArray FLArray_AsMutable(FLArray *array);
public static extern FLMutableArray FLArray_MutableCopy(FLArray *array);
public FLValue *FLArray_Get(FLArray *array, uint index) => Native.FLArray_Get(array, index);
public static extern FLMutableArray *FLArray_MutableCopy(FLArray *array, FLCopyFlags x);
public uint FLArray_Count(FLArray *array) => Native.FLArray_Count(array);
public bool FLArray_IsEmpty(FLArray *array) => Native.FLArray_IsEmpty(array);
public static void FLArrayIterator_Begin(FLArray *array, FLArrayIterator *i) => Impl.FLArrayIterator_Begin(array, i);
public static FLValue *FLArray_Get(FLArray *array, uint index) => Impl.FLArray_Get(array, index);
public static uint FLArray_Count(FLArray *array) => Impl.FLArray_Count(array);
public static extern FLValue *FLArray_Get(FLArray *array, uint index);
public void FLArrayIterator_Begin(FLArray *array, FLArrayIterator *i) => Native.FLArrayIterator_Begin(array, i);
public static extern void FLArrayIterator_Begin(FLArray *array, FLArrayIterator *i);
public static bool FLArray_IsEmpty(FLArray *array) => Impl.FLArray_IsEmpty(array);