Flutter Engine
fl_value.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_SHELL_PLATFORM_LINUX_FL_VALUE_H_
6 #define FLUTTER_SHELL_PLATFORM_LINUX_FL_VALUE_H_
7 
8 #include <glib.h>
9 #include <stdbool.h>
10 #include <stdint.h>
11 
12 #if !defined(__FLUTTER_LINUX_INSIDE__) && !defined(FLUTTER_LINUX_COMPILATION)
13 #error "Only <flutter_linux/flutter_linux.h> can be included directly."
14 #endif
15 
16 G_BEGIN_DECLS
17 
18 /**
19  * FlValue:
20  *
21  * #FlValue is an object that contains the data types used in the platform
22  * channel used by Flutter.
23  *
24  * In Dart the values are represented as follows:
25  * - #FL_VALUE_TYPE_NULL: Null
26  * - #FL_VALUE_TYPE_BOOL: bool
27  * - #FL_VALUE_TYPE_INT: num
28  * - #FL_VALUE_TYPE_FLOAT: num
29  * - #FL_VALUE_TYPE_STRING: String
30  * - #FL_VALUE_TYPE_UINT8_LIST: Uint8List
31  * - #FL_VALUE_TYPE_INT32_LIST: Int32List
32  * - #FL_VALUE_TYPE_INT64_LIST: Int64List
33  * - #FL_VALUE_TYPE_FLOAT_LIST: Float64List
34  * - #FL_VALUE_TYPE_LIST: List<dynamic>
35  * - #FL_VALUE_TYPE_MAP: Map<dynamic>
36  *
37  * See #FlMessageCodec to encode and decode these values.
38  */
39 typedef struct _FlValue FlValue;
40 
41 /**
42  * FlValueType:
43  * @FL_VALUE_TYPE_NULL: The null value.
44  * @FL_VALUE_TYPE_BOOL: A boolean.
45  * @FL_VALUE_TYPE_INT: A 64 bit signed integer.
46  * @FL_VALUE_TYPE_FLOAT: A 64 bit floating point number.
47  * @FL_VALUE_TYPE_STRING: UTF-8 text.
48  * @FL_VALUE_TYPE_UINT8_LIST: An ordered list of unsigned 8 bit integers.
49  * @FL_VALUE_TYPE_INT32_LIST: An ordered list of 32 bit integers.
50  * @FL_VALUE_TYPE_INT64_LIST: An ordered list of 64 bit integers.
51  * @FL_VALUE_TYPE_FLOAT_LIST: An ordered list of floating point numbers.
52  * @FL_VALUE_TYPE_LIST: An ordered list of #FlValue objects.
53  * @FL_VALUE_TYPE_MAP: A map of #FlValue objects keyed by #FlValue object.
54  *
55  * Types of #FlValue.
56  */
57 typedef enum {
69 } FlValueType;
70 
71 /**
72  * fl_value_new_null:
73  *
74  * Creates an #FlValue that contains a null value. The equivalent Dart type is
75  * null.
76  *
77  * Returns: a new #FlValue.
78  */
80 
81 /**
82  * fl_value_new_bool:
83  * @value: the value.
84  *
85  * Creates an #FlValue that contains a boolean value. The equivalent Dart type
86  * is a bool.
87  *
88  * Returns: a new #FlValue.
89  */
91 
92 /**
93  * fl_value_new_int:
94  * @value: the value.
95  *
96  * Creates an #FlValue that contains an integer number. The equivalent Dart type
97  * is a num.
98  *
99  * Returns: a new #FlValue.
100  */
101 FlValue* fl_value_new_int(int64_t value);
102 
103 /**
104  * fl_value_new_float:
105  * @value: the value.
106  *
107  * Creates an #FlValue that contains a floating point number. The equivalent
108  * Dart type is a num.
109  *
110  * Returns: a new #FlValue.
111  */
113 
114 /**
115  * fl_value_new_string:
116  * @value: a nul terminated UTF-8 string.
117  *
118  * Creates an #FlValue that contains UTF-8 text. The equivalent Dart type is a
119  * String.
120  *
121  * Returns: a new #FlValue.
122  */
123 FlValue* fl_value_new_string(const gchar* value);
124 
125 /**
126  * fl_value_new_string:
127  * @value: a buffer containing UTF-8 text. It does not require a nul terminator.
128  * @value_length: the number of bytes to use from @value.
129  *
130  * Creates an #FlValue that contains UTF-8 text. The equivalent Dart type is a
131  * String.
132  *
133  * Returns: a new #FlValue.
134  */
135 FlValue* fl_value_new_string_sized(const gchar* value, size_t value_length);
136 
137 /**
138  * fl_value_new_uint8_list:
139  * @value: an arrary of unsigned 8 bit integers.
140  * @value_length: number of elements in @value.
141  *
142  * Creates an ordered list containing 8 bit unsigned integers. The data is
143  * copied. The equivalent Dart type is a Uint8List.
144  *
145  * Returns: a new #FlValue.
146  */
147 FlValue* fl_value_new_uint8_list(const uint8_t* value, size_t value_length);
148 
149 /**
150  * fl_value_new_uint8_list:
151  * @value: a #GBytes.
152  *
153  * Creates an ordered list containing 8 bit unsigned integers. The data is
154  * copied. The equivalent Dart type is a Uint8List.
155  *
156  * Returns: a new #FlValue.
157  */
159 
160 /**
161  * fl_value_new_int32_list:
162  * @value: an arrary of signed 32 bit integers.
163  * @value_length: number of elements in @value.
164  *
165  * Creates an ordered list containing 32 bit integers. The equivalent Dart type
166  * is a Int32List.
167  *
168  * Returns: a new #FlValue.
169  */
170 FlValue* fl_value_new_int32_list(const int32_t* value, size_t value_length);
171 
172 /**
173  * fl_value_new_int64_list:
174  * @value: an arrary of signed 64 bit integers.
175  * @value_length: number of elements in @value.
176  *
177  * Creates an ordered list containing 64 bit integers. The equivalent Dart type
178  * is a Int64List.
179  *
180  * Returns: a new #FlValue.
181  */
182 FlValue* fl_value_new_int64_list(const int64_t* value, size_t value_length);
183 
184 /**
185  * fl_value_new_float_list:
186  * @value: an arrary of floating point numbers.
187  * @value_length: number of elements in @value.
188  *
189  * Creates an ordered list containing floating point numbers. The equivalent
190  * Dart type is a Float64List.
191  *
192  * Returns: a new #FlValue.
193  */
194 FlValue* fl_value_new_float_list(const double* value, size_t value_length);
195 
196 /**
197  * fl_value_new_list:
198  *
199  * Creates an ordered list. Children can be added to the list using
200  * fl_value_append(). The children are accessed using fl_value_get_length()
201  * and fl_value_get_list_value(). The equivalent Dart type is a List<dynamic>.
202  *
203  * The following example shows a simple list of values:
204  *
205  * |[<!-- language="C" -->
206  * g_autoptr(FlValue) value = fl_value_new_list ();
207  * fl_value_append_take (value, fl_value_new_string ("one");
208  * fl_value_append_take (value, fl_value_new_int (2);
209  * fl_value_append_take (value, fl_value_new_double (3.0);
210  * ]|
211  *
212  * This value can be decoded using:
213  *
214  * |[<!-- language="C" -->
215  * g_assert (fl_value_get_type (value) == FL_VALUE_TYPE_LIST);
216  * for (size_t i = 0; i < fl_value_get_length (value); i++) {
217  * FlValue *child = fl_value_get_list_value (value, i);
218  * process_value (child);
219  * }
220  * ]|
221  *
222  * Returns: a new #FlValue.
223  */
225 
226 /**
227  * fl_value_new_list_from_strv:
228  * @value: a %NULL-terminated array of strings.
229  *
230  * Creates an ordered list containing #FlString values.
231  *
232  * Returns: a new #FlValue.
233  */
234 FlValue* fl_value_new_list_from_strv(const gchar* const* value);
235 
236 /**
237  * fl_value_new_map:
238  *
239  * Creates an ordered associative array. Children can be added to the map
240  * using fl_value_set(), fl_value_set_take(), fl_value_set_string(),
241  * fl_value_set_string_take(). The children are accessed using
242  * fl_value_get_length(), fl_value_get_map_key(), fl_value_get_map_value(),
243  * fl_value_lookup() and fl_value_lookup_string(). The equivalent Dart type is a
244  * Map<dynamic>.
245  *
246  * The following example shows how to create a map of values keyed by strings:
247  *
248  * |[<!-- language="C" -->
249  * g_autoptr(FlValue) value = fl_value_new_map ();
250  * fl_value_set_string_take (value, "name", fl_value_new_string ("Gandalf"));
251  * fl_value_set_string_take (value, "occupation",
252  * fl_value_new_string ("Wizard"));
253  * fl_value_set_string_take (value, "age", fl_value_new_int (2019));
254  * ]|
255  *
256  * This value can be decoded using:
257  * |[<!-- language="C" -->
258  * g_assert (fl_value_get_type (value) == FL_VALUE_TYPE_MAP);
259  * FlValue *name = fl_value_lookup_string (value, "name");
260  * g_assert (fl_value_get_type (name) == FL_VALUE_TYPE_STRING);
261  * FlValue *age = fl_value_lookup_string (value, "age");
262  * g_assert (fl_value_get_type (age) == FL_VALUE_TYPE_INT);
263  * g_message ("Next customer is %s (%d years old)",
264  * fl_value_get_string (name),
265  * fl_value_get_int (age));
266  * ]|
267  *
268  * Returns: a new #FlValue.
269  */
271 
272 /**
273  * fl_value_ref:
274  * @value: an #FlValue.
275  *
276  * Increases the reference count of an #FlValue.
277  *
278  * Returns: the value that was referenced.
279  */
281 
282 /**
283  * fl_value_unref:
284  * @value: an #FlValue.
285  *
286  * Dereases the reference count of an #FlValue. When the refernece count hits
287  * zero @value is destroyed and no longer valid.
288  */
290 
291 /**
292  * fl_value_get_type:
293  * @value: an #FlValue.
294  *
295  * Gets the type of @value.
296  *
297  * Returns: an #FlValueType.
298  */
300 
301 /**
302  * fl_value_equal:
303  * @a: an #FlValue.
304  * @b: an #FlValue.
305  *
306  * Compares two #FlValue to see if they are equivalent. Two values are
307  * considered equivalent if they are of the same type and their data is the same
308  * including any child values. For values of type #FL_VALUE_TYPE_MAP the order
309  * of the values does not matter.
310  *
311  * Returns: %TRUE if both values are equivalent.
312  */
313 bool fl_value_equal(FlValue* a, FlValue* b);
314 
315 /**
316  * fl_value_append:
317  * @value: an #FlValue of type #FL_VALUE_TYPE_LIST.
318  * @child: an #FlValue.
319  *
320  * Adds @child to the end of @value. Calling this with an #FlValue that is not
321  * of type #FL_VALUE_TYPE_LIST is a programming error.
322  */
323 void fl_value_append(FlValue* value, FlValue* child);
324 
325 /**
326  * fl_value_append:
327  * @value: an #FlValue of type #FL_VALUE_TYPE_LIST.
328  * @child: (transfer full): an #FlValue.
329  *
330  * Adds @child to the end of @value. Ownership of @child is taken by @value.
331  * Calling this with an #FlValue that is not of type #FL_VALUE_TYPE_LIST is a
332  * programming error.
333  */
335 
336 /**
337  * fl_value_set:
338  * @value: an #FlValue of type #FL_VALUE_TYPE_MAP.
339  * @key: an #FlValue.
340  * @child_value: an #FlValue.
341  *
342  * Sets @key in @value to @child_value. If an existing value was in the map with
343  * the same key it is replaced. Calling this with an #FlValue that is not of
344  * type #FL_VALUE_TYPE_MAP is a programming error.
345  */
346 void fl_value_set(FlValue* value, FlValue* key, FlValue* child_value);
347 
348 /**
349  * fl_value_set_take:
350  * @value: an #FlValue of type #FL_VALUE_TYPE_MAP.
351  * @key: (transfer full): an #FlValue.
352  * @child_value: (transfer full): an #FlValue.
353  *
354  * Sets @key in @value to @child_value. Ownership of both @key and @child_value
355  * is taken by @value. If an existing value was in the map with the same key it
356  * is replaced. Calling this with an #FlValue that is not of type
357  * #FL_VALUE_TYPE_MAP is a programming error.
358  */
359 void fl_value_set_take(FlValue* value, FlValue* key, FlValue* child_value);
360 
361 /**
362  * fl_value_set_string:
363  * @value: an #FlValue of type #FL_VALUE_TYPE_MAP.
364  * @key: a UTF-8 text key.
365  * @child_value: an #FlValue.
366  *
367  * Sets a value in the map with a text key. If an existing value was in the map
368  * with the same key it is replaced. Calling this with an #FlValue that is not
369  * of type #FL_VALUE_TYPE_MAP is a programming error.
370  */
372  const gchar* key,
373  FlValue* child_value);
374 
375 /**
376  * fl_value_set_string_take:
377  * @value: an #FlValue of type #FL_VALUE_TYPE_MAP.
378  * @key: a UTF-8 text key.
379  * @child_value: (transfer full): an #FlValue.
380  *
381  * Sets a value in the map with a text key, taking ownership of the value. If an
382  * existing value was in the map with the same key it is replaced. Calling this
383  * with an #FlValue that is not of type #FL_VALUE_TYPE_MAP is a programming
384  * error.
385  */
387  const gchar* key,
388  FlValue* child_value);
389 
390 /**
391  * fl_value_get_bool:
392  * @value: an #FlValue of type #FL_VALUE_TYPE_BOOL.
393  *
394  * Gets the boolean value of @value. Calling this with an #FlValue that is
395  * not of type #FL_VALUE_TYPE_BOOL is a programming error.
396  *
397  * Returns: a boolean value.
398  */
400 
401 /**
402  * fl_value_get_int:
403  * @value: an #FlValue of type #FL_VALUE_TYPE_INT.
404  *
405  * Gets the integer number of @value. Calling this with an #FlValue that is
406  * not of type #FL_VALUE_TYPE_INT is a programming error.
407  *
408  * Returns: an integer number.
409  */
410 int64_t fl_value_get_int(FlValue* value);
411 
412 /**
413  * fl_value_get_double:
414  * @value: an #FlValue of type #FL_VALUE_TYPE_FLOAT.
415  *
416  * Gets the floating point number of @value. Calling this with an #FlValue
417  * that is not of type #FL_VALUE_TYPE_FLOAT is a programming error.
418  *
419  * Returns: a UTF-8 encoded string.
420  */
422 
423 /**
424  * fl_value_get_string:
425  * @value: an #FlValue of type #FL_VALUE_TYPE_STRING.
426  *
427  * Gets the UTF-8 text contained in @value. Calling this with an #FlValue
428  * that is not of type #FL_VALUE_TYPE_STRING is a programming error.
429  *
430  * Returns: a UTF-8 encoded string.
431  */
432 const gchar* fl_value_get_string(FlValue* value);
433 
434 /**
435  * fl_value_get_length:
436  * @value: an #FlValue of type #FL_VALUE_TYPE_UINT8_LIST,
437  * #FL_VALUE_TYPE_INT32_LIST, #FL_VALUE_TYPE_INT64_LIST,
438  * #FL_VALUE_TYPE_FLOAT_LIST, #FL_VALUE_TYPE_LIST or #FL_VALUE_TYPE_MAP.
439  *
440  * Gets the number of elements @value contains. This is only valid for list
441  * and map types. Calling this with other types is a programming error.
442  *
443  * Returns: the number of elements inside @value.
444  */
446 
447 /**
448  * fl_value_get_uint8_list:
449  * @value: an #FlValue of type #FL_VALUE_TYPE_UINT8_LIST.
450  *
451  * Gets the array of unisigned 8 bit integers @value contains. The data
452  * contains fl_get_length() elements. Calling this with an #FlValue that is
453  * not of type #FL_VALUE_TYPE_UINT8_LIST is a programming error.
454  *
455  * Returns: an array of unsigned 8 bit integers.
456  */
457 const uint8_t* fl_value_get_uint8_list(FlValue* value);
458 
459 /**
460  * fl_value_get_int32_list:
461  * @value: an #FlValue of type #FL_VALUE_TYPE_INT32_LIST.
462  *
463  * Gets the array of 32 bit integers @value contains. The data contains
464  * fl_get_length() elements. Calling this with an #FlValue that is not of
465  * type #FL_VALUE_TYPE_INT32_LIST is a programming error.
466  *
467  * Returns: an array of 32 bit integers.
468  */
469 const int32_t* fl_value_get_int32_list(FlValue* value);
470 
471 /**
472  * fl_value_get_int64_list:
473  * @value: an #FlValue of type #FL_VALUE_TYPE_INT64_LIST.
474  *
475  * Gets the array of 64 bit integers @value contains. The data contains
476  * fl_get_length() elements. Calling this with an #FlValue that is not of
477  * type #FL_VALUE_TYPE_INT64_LIST is a programming error.
478  *
479  * Returns: an array of 64 bit integers.
480  */
481 const int64_t* fl_value_get_int64_list(FlValue* value);
482 
483 /**
484  * fl_value_get_float_list:
485  * @value: an #FlValue of type #FL_VALUE_TYPE_FLOAT_LIST.
486  *
487  * Gets the array of floating point numbers @value contains. The data
488  * contains fl_get_length() elements. Calling this with an #FlValue that is
489  * not of type #FL_VALUE_TYPE_FLOAT_LIST is a programming error.
490  *
491  * Returns: an array of floating point numbers.
492  */
493 const double* fl_value_get_float_list(FlValue* value);
494 
495 /**
496  * fl_value_get_list_value:
497  * @value: an #FlValue of type #FL_VALUE_TYPE_LIST.
498  * @index: an index in the list.
499  *
500  * Gets a child element of the list. It is a programming error to request an
501  * index that is outside the size of the list as returned from
502  * fl_value_get_length(). Calling this with an #FlValue that is not of type
503  * #FL_VALUE_TYPE_LIST is a programming error.
504  *
505  * Returns: an #FlValue.
506  */
508 
509 /**
510  * fl_value_get_map_key:
511  * @value: an #FlValue of type #FL_VALUE_TYPE_MAP.
512  * @index: an index in the map.
513  *
514  * Gets an key from the map. It is a programming error to request an index that
515  * is outside the size of the list as returned from fl_value_get_length().
516  * Calling this with an #FlValue that is not of type #FL_VALUE_TYPE_MAP is a
517  * programming error.
518  *
519  * Returns: an #FlValue.
520  */
521 FlValue* fl_value_get_map_key(FlValue* value, size_t index);
522 
523 /**
524  * fl_value_get_map_key:
525  * @value: an #FlValue of type #FL_VALUE_TYPE_MAP.
526  * @index: an index in the map.
527  *
528  * Gets a value from the map. It is a programming error to request an index that
529  * is outside the size of the list as returned from fl_value_get_length().
530  * Calling this with an #FlValue that is not of type #FL_VALUE_TYPE_MAP is a
531  * programming error.
532  *
533  * Returns: an #FlValue.
534  */
536 
537 /**
538  * fl_value_lookup:
539  * @value: an #FlValue of type #FL_VALUE_TYPE_MAP.
540  * @key: a key value.
541  *
542  * Gets the map entry that matches @key. Keys are checked using
543  * fl_value_equal(). Calling this with an #FlValue that is not of type
544  * #FL_VALUE_TYPE_MAP is a programming error.
545  *
546  * Map lookups are not optimised for performance - if have a large map or need
547  * frequent access you should copy the data into another structure, e.g.
548  * #GHashTable.
549  *
550  * Returns: (allow-none): the value with this key or %NULL if not one present.
551  */
553 
554 /**
555  * fl_value_lookup_string:
556  * @value: an #FlValue of type #FL_VALUE_TYPE_MAP.
557  * @key: a key value.
558  *
559  * Gets the map entry that matches @key. Keys are checked using
560  * fl_value_equal(). Calling this with an #FlValue that is not of type
561  * #FL_VALUE_TYPE_MAP is a programming error.
562  *
563  * Map lookups are not optimised for performance - if have a large map or need
564  * frequent access you should copy the data into another structure, e.g.
565  * #GHashTable.
566  *
567  * Returns: (allow-none): the value with this key or %NULL if not one present.
568  */
569 FlValue* fl_value_lookup_string(FlValue* value, const gchar* key);
570 
571 /**
572  * fl_value_to_string:
573  * @value: an #FlValue.
574  *
575  * Converts an #FlValue to a text representation, suitable for logging purposes.
576  * The text is formatted to be match the equivalent Dart toString() methods.
577  *
578  * Returns: UTF-8 text.
579  */
581 
582 G_DEFINE_AUTOPTR_CLEANUP_FUNC(FlValue, fl_value_unref)
583 
584 G_END_DECLS
585 
586 #endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_VALUE_H_
FlValue * fl_value_new_int32_list(const int32_t *value, size_t value_length)
Definition: fl_value.cc:280
bool fl_value_equal(FlValue *a, FlValue *b)
Definition: fl_value.cc:400
FlValue * fl_value_new_string_sized(const gchar *value, size_t value_length)
Definition: fl_value.cc:254
void fl_value_set_string(FlValue *value, const gchar *key, FlValue *child_value)
Definition: fl_value.cc:553
FlValue * fl_value_new_list()
Definition: fl_value.cc:310
FlValue * fl_value_new_uint8_list_from_bytes(GBytes *value)
Definition: fl_value.cc:273
void fl_value_unref(FlValue *value)
Definition: fl_value.cc:341
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:39
void fl_value_append(FlValue *value, FlValue *child)
Definition: fl_value.cc:506
FlValue * fl_value_get_list_value(FlValue *value, size_t index)
Definition: fl_value.cc:677
FlValue * fl_value_new_int64_list(const int64_t *value, size_t value_length)
Definition: fl_value.cc:290
FlValue * fl_value_new_list_from_strv(const gchar *const *value)
Definition: fl_value.cc:317
FlValueType
Definition: fl_value.h:57
FlValue * fl_value_lookup_string(FlValue *value, const gchar *key)
Definition: fl_value.cc:712
FlValue * fl_value_new_string(const gchar *value)
Definition: fl_value.cc:247
double fl_value_get_float(FlValue *value)
Definition: fl_value.cc:589
FlValue * fl_value_lookup(FlValue *value, FlValue *key)
Definition: fl_value.cc:701
const uint8_t * fl_value_get_uint8_list(FlValue *value)
Definition: fl_value.cc:603
FlValue * fl_value_new_null()
Definition: fl_value.cc:222
FlValueType fl_value_get_type(FlValue *value)
Definition: fl_value.cc:395
void fl_value_append_take(FlValue *value, FlValue *child)
Definition: fl_value.cc:514
uint8_t value
const double * fl_value_get_float_list(FlValue *value)
Definition: fl_value.cc:624
FlValue * fl_value_new_float(double value)
Definition: fl_value.cc:240
void fl_value_set(FlValue *value, FlValue *key, FlValue *child_value)
Definition: fl_value.cc:523
FlValue * fl_value_get_map_value(FlValue *value, size_t index)
Definition: fl_value.cc:693
void fl_value_set_string_take(FlValue *value, const gchar *key, FlValue *child_value)
Definition: fl_value.cc:564
const int64_t * fl_value_get_int64_list(FlValue *value)
Definition: fl_value.cc:617
FlValue * fl_value_new_uint8_list(const uint8_t *value, size_t value_length)
Definition: fl_value.cc:263
FlValue * fl_value_get_map_key(FlValue *value, size_t index)
Definition: fl_value.cc:685
void fl_value_set_take(FlValue *value, FlValue *key, FlValue *child_value)
Definition: fl_value.cc:532
bool fl_value_get_bool(FlValue *value)
Definition: fl_value.cc:575
size_t fl_value_get_length(FlValue *value)
Definition: fl_value.cc:631
const gchar * fl_value_get_string(FlValue *value)
Definition: fl_value.cc:596
FlValue * fl_value_new_bool(bool value)
Definition: fl_value.cc:226
FlValue * fl_value_new_float_list(const double *value, size_t value_length)
Definition: fl_value.cc:300
gchar * fl_value_to_string(FlValue *value)
Definition: fl_value.cc:723
const int32_t * fl_value_get_int32_list(FlValue *value)
Definition: fl_value.cc:610
FlValue * fl_value_new_int(int64_t value)
Definition: fl_value.cc:233
FlValue * fl_value_new_map()
Definition: fl_value.cc:327
FlValue * fl_value_ref(FlValue *value)
Definition: fl_value.cc:335
int64_t fl_value_get_int(FlValue *value)
Definition: fl_value.cc:582