Couchbase Lite C
Couchbase Lite C API
Loading...
Searching...
No Matches
FLMutable.h
Go to the documentation of this file.
1//
2// FLMutable.h
3//
4// Copyright 2016-Present Couchbase, Inc.
5//
6// Use of this software is governed by the Business Source License included
7// in the file licenses/BSL-Couchbase.txt. As of the Change Date specified
8// in that file, in accordance with the Business Source License, use of this
9// software will be governed by the Apache License, Version 2.0, included in
10// the file licenses/APL2.txt.
11//
12
13#pragma once
14#ifndef _FLMUTABLE_H
15#define _FLMUTABLE_H
16
17#include "FLValue.h"
18#include <stdarg.h>
19
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26 // This is the C API! For the C++ API, see Fleece.hh.
27
28
31
32
40
41
42 //====== MUTABLE ARRAY
43
44
47
61
65
70
74
77
80
83 bool changed) FLAPI;
84
90 uint32_t firstIndex,
91 uint32_t count) FLAPI;
92
98 uint32_t firstIndex,
99 uint32_t count) FLAPI;
100
105 uint32_t size) FLAPI;
106
113 uint32_t index) FLAPI;
114
121 uint32_t index) FLAPI;
122
123
125 inline void FLMutableArray_SetNull(FLMutableArray, uint32_t index);
127 inline void FLMutableArray_SetBool(FLMutableArray, uint32_t index, bool);
129 inline void FLMutableArray_SetInt(FLMutableArray, uint32_t index, int64_t);
133 inline void FLMutableArray_SetUInt(FLMutableArray, uint32_t index, uint64_t);
135 inline void FLMutableArray_SetFloat(FLMutableArray, uint32_t index, float);
137 inline void FLMutableArray_SetDouble(FLMutableArray, uint32_t index, double);
139 inline void FLMutableArray_SetString(FLMutableArray, uint32_t index, FLString);
141 inline void FLMutableArray_SetData(FLMutableArray, uint32_t index, FLSlice);
143 inline void FLMutableArray_SetValue(FLMutableArray, uint32_t index, FLValue);
145 inline void FLMutableArray_SetArray(FLMutableArray, uint32_t index, FLArray);
147 inline void FLMutableArray_SetDict(FLMutableArray, uint32_t index, FLDict);
148
152 inline void FLMutableArray_AppendBool(FLMutableArray, bool);
154 inline void FLMutableArray_AppendInt(FLMutableArray, int64_t);
158 inline void FLMutableArray_AppendUInt(FLMutableArray, uint64_t);
160 inline void FLMutableArray_AppendFloat(FLMutableArray, float);
162 inline void FLMutableArray_AppendDouble(FLMutableArray, double);
173
175
176
177 //====== MUTABLE DICT
178
179
182
194
198
203
208
211
214
217
220
223
230
237
238
242 inline void FLMutableDict_SetBool(FLMutableDict, FLString key, bool);
244 inline void FLMutableDict_SetInt(FLMutableDict, FLString key, int64_t);
248 inline void FLMutableDict_SetUInt(FLMutableDict, FLString key, uint64_t);
250 inline void FLMutableDict_SetFloat(FLMutableDict, FLString key, float);
252 inline void FLMutableDict_SetDouble(FLMutableDict, FLString key, double);
263
265
266
267 //====== NEWSTRING, NEWDATA
268
269
272
277
282
284
285
286 //====== VALUE SLOTS
287
288
302
309
316
323
324
334
335 inline void FLSlot_SetArray(FLSlot slot, FLArray array) {
336 FLSlot_SetValue(slot, (FLValue)array);
337 }
338
339 inline void FLSlot_SetDict(FLSlot slot, FLDict dict) {
340 FLSlot_SetValue(slot, (FLValue)dict);
341 }
342
344
345
346 //====== FORMATTED VALUE BUILDER
347
348
379
387
391 FLEECE_PUBLIC FLValue FLValue_NewWithFormatV(const char *format, va_list args);
392
396 __printflike(2, 3);
397
401 __printflike(2, 3);
402
405 FLEECE_PUBLIC void FLValue_UpdateWithFormatV(FLValue, const char *format, va_list args);
406
408
409
410 // implementations of the inline methods declared earlier:
411
412 inline void FLMutableArray_SetNull(FLMutableArray a, uint32_t index) {
414 }
415 inline void FLMutableArray_SetBool(FLMutableArray a, uint32_t index, bool val) {
416 FLSlot_SetBool(FLMutableArray_Set(a, index), val);
417 }
418 inline void FLMutableArray_SetInt(FLMutableArray a, uint32_t index, int64_t val) {
419 FLSlot_SetInt(FLMutableArray_Set(a, index), val);
420 }
421 inline void FLMutableArray_SetUInt(FLMutableArray a, uint32_t index, uint64_t val) {
422 FLSlot_SetUInt(FLMutableArray_Set(a, index), val);
423 }
424 inline void FLMutableArray_SetFloat(FLMutableArray a, uint32_t index, float val) {
425 FLSlot_SetFloat(FLMutableArray_Set(a, index), val);
426 }
427 inline void FLMutableArray_SetDouble(FLMutableArray a, uint32_t index, double val) {
428 FLSlot_SetDouble(FLMutableArray_Set(a, index), val);
429 }
430 inline void FLMutableArray_SetString(FLMutableArray a, uint32_t index, FLString val) {
431 FLSlot_SetString(FLMutableArray_Set(a, index), val);
432 }
433 inline void FLMutableArray_SetData(FLMutableArray a, uint32_t index, FLSlice val) {
434 FLSlot_SetData(FLMutableArray_Set(a, index), val);
435 }
436 inline void FLMutableArray_SetValue(FLMutableArray a, uint32_t index, FLValue val) {
437 FLSlot_SetValue(FLMutableArray_Set(a, index), val);
438 }
439 inline void FLMutableArray_SetArray(FLMutableArray a, uint32_t index, FLArray val) {
441 }
442 inline void FLMutableArray_SetDict(FLMutableArray a, uint32_t index, FLDict val) {
444 }
445
449 inline void FLMutableArray_AppendBool(FLMutableArray a, bool val) {
451 }
452 inline void FLMutableArray_AppendInt(FLMutableArray a, int64_t val) {
454 }
455 inline void FLMutableArray_AppendUInt(FLMutableArray a, uint64_t val) {
457 }
479
483 inline void FLMutableDict_SetBool(FLMutableDict d, FLString key, bool val) {
484 FLSlot_SetBool(FLMutableDict_Set(d, key), val);
485 }
486 inline void FLMutableDict_SetInt(FLMutableDict d, FLString key, int64_t val) {
487 FLSlot_SetInt(FLMutableDict_Set(d, key), val);
488 }
489 inline void FLMutableDict_SetUInt(FLMutableDict d, FLString key, uint64_t val) {
490 FLSlot_SetUInt(FLMutableDict_Set(d, key), val);
491 }
492 inline void FLMutableDict_SetFloat(FLMutableDict d, FLString key, float val) {
494 }
495 inline void FLMutableDict_SetDouble(FLMutableDict d, FLString key, double val) {
497 }
502 FLSlot_SetData(FLMutableDict_Set(d, key), val);
503 }
506 }
512 }
513
514
516
517#ifdef __cplusplus
518}
519#endif
520
522
523#endif // _FLMUTABLE_H
#define __printflike(fmtarg, firstvararg)
Definition CBL_Compat.h:133
#define FL_NULLABLE
Definition CompilerSupport.h:94
#define FLEECE_PUBLIC
Definition CompilerSupport.h:269
#define FL_ASSUME_NONNULL_BEGIN
Definition CompilerSupport.h:92
#define NODISCARD
Definition CompilerSupport.h:63
#define FL_ASSUME_NONNULL_END
Definition CompilerSupport.h:93
#define FLAPI
Definition CompilerSupport.h:292
FLSlice FLString
Definition FLSlice.h:98
FLEECE_PUBLIC void FLValue_Release(FLValue FL_NULLABLE)
Decrements the ref-count of a mutable value, or of an immutable value's FLDoc.
FLEECE_PUBLIC FLValue FL_NULLABLE FLValue_Retain(FLValue FL_NULLABLE)
Increments the ref-count of a mutable value, or of an immutable value's FLDoc.
void FLMutableArray_AppendInt(FLMutableArray, int64_t)
Appends an integer to an array.
Definition FLMutable.h:452
NODISCARD FLEECE_PUBLIC FLMutableArray FL_NULLABLE FLMutableArray_New(void)
Creates a new empty mutable Array.
FLEECE_PUBLIC void FLMutableDict_Remove(FLMutableDict FL_NULLABLE, FLString key)
Removes the value for a key.
FLCopyFlags
Option flags for making mutable copies of values.
Definition FLMutable.h:34
FLEECE_PUBLIC FLMutableArray FL_NULLABLE FLMutableDict_GetMutableArray(FLMutableDict FL_NULLABLE, FLString key)
Convenience function for getting an array-valued property in mutable form.
FLEECE_PUBLIC FLValue FL_NULLABLE FLValue_NewString(FLString)
Allocates a string value on the heap.
void FLMutableArray_AppendBool(FLMutableArray, bool)
Appends a boolean value to an array.
Definition FLMutable.h:449
void FLMutableArray_AppendDict(FLMutableArray, FLDict)
Appends a Fleece dictionary to an array.
Definition FLMutable.h:476
NODISCARD FLEECE_PUBLIC FLMutableArray FL_NULLABLE FLMutableArray_GetMutableArray(FLMutableArray FL_NULLABLE, uint32_t index)
Convenience function for getting an array-valued property in mutable form.
FLEECE_PUBLIC void FLMutableDict_RemoveAll(FLMutableDict FL_NULLABLE)
Removes all keys and values.
void FLMutableDict_SetUInt(FLMutableDict, FLString key, uint64_t)
Stores an unsigned integer into a mutable dictionary.
Definition FLMutable.h:489
void FLMutableDict_SetBool(FLMutableDict, FLString key, bool)
Stores a boolean value into a mutable dictionary.
Definition FLMutable.h:483
void FLMutableArray_AppendArray(FLMutableArray, FLArray)
Appends a Fleece array to an array.
Definition FLMutable.h:473
FLEECE_PUBLIC FLMutableDict FL_NULLABLE FLDict_MutableCopy(FLDict FL_NULLABLE source, FLCopyFlags)
Creates a new mutable Dict that's a copy of the source Dict.
void FLMutableDict_SetFloat(FLMutableDict, FLString key, float)
Stores a 32-bit floating-point number into a mutable dictionary.
Definition FLMutable.h:492
void FLMutableArray_SetString(FLMutableArray, uint32_t index, FLString)
Stores a UTF-8-encoded string into an array.
Definition FLMutable.h:430
FLEECE_PUBLIC FLMutableDict FL_NULLABLE FLMutableDict_GetMutableDict(FLMutableDict FL_NULLABLE, FLString key)
Convenience function for getting a dict-valued property in mutable form.
FLEECE_PUBLIC FLDict FL_NULLABLE FLMutableDict_GetSource(FLMutableDict FL_NULLABLE)
If the Dict was created by FLDict_MutableCopy, returns the original source Dict.
FLMutableArray FL_NULLABLE FLMutableArray_Retain(FLMutableArray FL_NULLABLE d)
Increments the ref-count of a mutable Array.
Definition FLMutable.h:67
FLEECE_PUBLIC void FLMutableArray_Insert(FLMutableArray FL_NULLABLE array, uint32_t firstIndex, uint32_t count)
Inserts a contiguous range of JSON null values into the array.
void FLMutableArray_AppendData(FLMutableArray, FLSlice)
Appends a binary data blob to an array.
Definition FLMutable.h:467
FLEECE_PUBLIC void FLMutableArray_Resize(FLMutableArray FL_NULLABLE array, uint32_t size)
Changes the size of an array.
FLEECE_PUBLIC FLMutableDict FL_NULLABLE FLMutableDict_New(void)
Creates a new empty mutable Dict.
void FLMutableDict_SetNull(FLMutableDict, FLString key)
Stores a JSON null value into a mutable dictionary.
Definition FLMutable.h:480
FLEECE_PUBLIC void FLMutableArray_SetChanged(FLMutableArray FL_NULLABLE, bool changed)
Sets or clears the mutable Array's "changed" flag.
void FLMutableArray_SetDict(FLMutableArray, uint32_t index, FLDict)
Stores a Fleece dictionary into an array.
Definition FLMutable.h:442
FLEECE_PUBLIC bool FLMutableDict_IsChanged(FLMutableDict FL_NULLABLE)
Returns true if the Dict has been changed from the source it was copied from.
FLEECE_PUBLIC FLArray FL_NULLABLE FLMutableArray_GetSource(FLMutableArray FL_NULLABLE)
If the Array was created by FLArray_MutableCopy, returns the original source Array.
void FLMutableArray_AppendUInt(FLMutableArray, uint64_t)
Appends an unsigned integer to an array.
Definition FLMutable.h:455
FLEECE_PUBLIC FLValue FL_NULLABLE FLValue_NewData(FLSlice)
Allocates a data/blob value on the heap.
void FLMutableDict_SetData(FLMutableDict, FLString key, FLSlice)
Stores a binary data blob into a mutable dictionary.
Definition FLMutable.h:501
void FLMutableDict_SetInt(FLMutableDict, FLString key, int64_t)
Stores an integer into a mutable dictionary.
Definition FLMutable.h:486
void FLMutableArray_AppendString(FLMutableArray, FLString)
Appends a UTF-8-encoded string to an array.
Definition FLMutable.h:464
void FLMutableArray_AppendValue(FLMutableArray, FLValue)
Appends a Fleece value to an array.
Definition FLMutable.h:470
FLEECE_PUBLIC bool FLMutableArray_IsChanged(FLMutableArray FL_NULLABLE)
Returns true if the Array has been changed from the source it was copied from.
NODISCARD FLEECE_PUBLIC FLMutableDict FL_NULLABLE FLMutableArray_GetMutableDict(FLMutableArray FL_NULLABLE, uint32_t index)
Convenience function for getting an array-valued property in mutable form.
void FLMutableArray_SetFloat(FLMutableArray, uint32_t index, float)
Stores a 32-bit floating-point number into an array.
Definition FLMutable.h:424
void FLMutableArray_SetDouble(FLMutableArray, uint32_t index, double)
Stores a 64-bit floating point number into an array.
Definition FLMutable.h:427
void FLMutableArray_AppendDouble(FLMutableArray, double)
Appends a 64-bit floating point number to an array.
Definition FLMutable.h:461
void FLMutableDict_SetDouble(FLMutableDict, FLString key, double)
Stores a 64-bit floating point number into a mutable dictionary.
Definition FLMutable.h:495
void FLMutableArray_SetUInt(FLMutableArray, uint32_t index, uint64_t)
Stores an unsigned integer into an array.
Definition FLMutable.h:421
void FLMutableDict_SetString(FLMutableDict, FLString key, FLString)
Stores a UTF-8-encoded string into a mutable dictionary.
Definition FLMutable.h:498
NODISCARD FLEECE_PUBLIC FLMutableArray FL_NULLABLE FLArray_MutableCopy(FLArray FL_NULLABLE, FLCopyFlags)
Creates a new mutable Array that's a copy of the source Array.
void FLMutableDict_Release(FLMutableDict FL_NULLABLE d)
Decrements the refcount of (and possibly frees) a mutable Dict.
Definition FLMutable.h:205
FLMutableDict FL_NULLABLE FLMutableDict_Retain(FLMutableDict FL_NULLABLE d)
Increments the ref-count of a mutable Dict.
Definition FLMutable.h:200
void FLMutableArray_SetValue(FLMutableArray, uint32_t index, FLValue)
Stores a Fleece value into an array.
Definition FLMutable.h:436
void FLMutableArray_SetData(FLMutableArray, uint32_t index, FLSlice)
Stores a binary data blob into an array.
Definition FLMutable.h:433
void FLMutableArray_AppendNull(FLMutableArray)
Appends a JSON null value to an array.
Definition FLMutable.h:446
void FLMutableArray_SetArray(FLMutableArray, uint32_t index, FLArray)
Stores a Fleece array into an array.
Definition FLMutable.h:439
void FLMutableDict_SetValue(FLMutableDict, FLString key, FLValue)
Stores a Fleece value into a mutable dictionary.
Definition FLMutable.h:504
void FLMutableArray_SetInt(FLMutableArray, uint32_t index, int64_t)
Stores an integer into an array.
Definition FLMutable.h:418
void FLMutableArray_SetNull(FLMutableArray, uint32_t index)
Stores a JSON null value into an array.
Definition FLMutable.h:412
FLEECE_PUBLIC void FLMutableArray_Remove(FLMutableArray FL_NULLABLE array, uint32_t firstIndex, uint32_t count)
Removes contiguous items from the array.
void FLMutableArray_SetBool(FLMutableArray, uint32_t index, bool)
Stores a boolean value into an array.
Definition FLMutable.h:415
void FLMutableDict_SetArray(FLMutableDict, FLString key, FLArray)
Stores a Fleece array into a mutable dictionary.
Definition FLMutable.h:507
FLEECE_PUBLIC void FLMutableDict_SetChanged(FLMutableDict FL_NULLABLE, bool)
Sets or clears the mutable Dict's "changed" flag.
void FLMutableArray_Release(FLMutableArray FL_NULLABLE d)
Decrements the refcount of (and possibly frees) a mutable Array.
Definition FLMutable.h:71
void FLMutableArray_AppendFloat(FLMutableArray, float)
Appends a 32-bit floating-point number to an array.
Definition FLMutable.h:458
void FLMutableDict_SetDict(FLMutableDict, FLString key, FLDict)
Stores a Fleece dictionary into a mutable dictionary.
Definition FLMutable.h:510
@ kFLDeepCopy
Deep copy of mutable values.
Definition FLMutable.h:36
@ kFLCopyImmutables
Makes mutable copies of immutables instead of just refs.
Definition FLMutable.h:37
@ kFLDefaultCopy
Shallow copy. References immutables instead of copying.
Definition FLMutable.h:35
@ kFLDeepCopyImmutables
Both deep-copy and copy-immutables.
Definition FLMutable.h:38
NODISCARD FLEECE_PUBLIC FLSlot FLMutableArray_Append(FLMutableArray)
Appends a null value to the array and returns an FLSlot that refers to that position.
FLEECE_PUBLIC void FLSlot_SetString(FLSlot, FLString)
Stores a UTF-8 string into a slot.
FLEECE_PUBLIC void FLSlot_SetNull(FLSlot)
Stores a JSON null into a slot.
FLEECE_PUBLIC void FLSlot_SetBool(FLSlot, bool)
Stores a boolean into a slot.
FLEECE_PUBLIC void FLSlot_SetUInt(FLSlot, uint64_t)
Stores an unsigned int into a slot.
FLEECE_PUBLIC void FLSlot_SetFloat(FLSlot, float)
Stores a float into a slot.
FLEECE_PUBLIC void FLSlot_SetDouble(FLSlot, double)
Stores a double into a slot.
void FLSlot_SetDict(FLSlot slot, FLDict dict)
Definition FLMutable.h:339
FLEECE_PUBLIC void FLSlot_SetValue(FLSlot, FLValue)
Stores an FLValue into a slot.
void FLSlot_SetArray(FLSlot slot, FLArray array)
Definition FLMutable.h:335
NODISCARD FLEECE_PUBLIC FLSlot FLMutableArray_Set(FLMutableArray, uint32_t index)
Returns an FLSlot that refers to the given index of the given array.
NODISCARD FLEECE_PUBLIC FLSlot FLMutableDict_Set(FLMutableDict, FLString key)
Returns an FLSlot that refers to the given key/value pair of the given dictionary.
FLEECE_PUBLIC void FLSlot_SetInt(FLSlot, int64_t)
Stores an integer into a slot.
FLEECE_PUBLIC void FLSlot_SetData(FLSlot, FLSlice)
Stores a data blob into a slot.
NODISCARD FLEECE_PUBLIC FLValue FLValue_NewWithFormat(const char *format,...) __printflike(1
Translates the JSON-style format string into a tree of mutable Fleece objects, adding values from the...
FLEECE_PUBLIC void FLMutableArray_UpdateWithFormat(FLMutableArray, const char *format,...) __printflike(2
Like FLValue_NewWithFormat, except it operates on an existing mutable array.
FLEECE_PUBLIC void FLEECE_PUBLIC void FLMutableDict_UpdateWithFormat(FLMutableDict, const char *format,...) __printflike(2
Like FLValue_NewWithFormat, except it operates on an existing mutable dict.
NODISCARD FLEECE_PUBLIC FLValue NODISCARD FLEECE_PUBLIC FLValue FLValue_NewWithFormatV(const char *format, va_list args)
Variant of FLValue_NewWithFormat that takes a pre-existing va_list.
FLEECE_PUBLIC void FLEECE_PUBLIC void FLEECE_PUBLIC void FLValue_UpdateWithFormatV(FLValue, const char *format, va_list args)
Like FLMutableArray_UpdateWithFormat / FLMutableDict_UpdateWithFormat but takes a pre-existing va_lis...
struct _FLDict * FLMutableDict
A reference to a mutable dictionary.
Definition FLBase.h:40
const struct _FLDict * FLDict
A reference to a dictionary (map) value.
Definition FLBase.h:37
struct _FLSlot * FLSlot
A reference to a mutable array/dict item.
Definition FLBase.h:38
struct _FLArray * FLMutableArray
A reference to a mutable array.
Definition FLBase.h:39
const struct _FLArray * FLArray
A reference to an array value.
Definition FLBase.h:36
const struct _FLValue * FLValue
A reference to a value of any type.
Definition FLBase.h:35
A simple reference to a block of memory.
Definition FLSlice.h:45