Flutter Linux Embedder
fl_value.cc File Reference
#include "flutter/shell/platform/linux/public/flutter_linux/fl_value.h"
#include <gmodule.h>
#include <cstring>

Go to the source code of this file.

Classes

struct  _FlValue
 
struct  FlValueBool
 
struct  FlValueInt
 
struct  FlValueDouble
 
struct  FlValueString
 
struct  FlValueUint8List
 
struct  FlValueInt32List
 
struct  FlValueInt64List
 
struct  FlValueFloat32List
 
struct  FlValueFloatList
 
struct  FlValueList
 
struct  FlValueMap
 
struct  FlValueCustom
 

Functions

static FlValuefl_value_new (FlValueType type, size_t size)
 
static void fl_value_destroy (gpointer value)
 
static ssize_t fl_value_lookup_index (FlValue *self, FlValue *key)
 
static void int_to_string (int64_t value, GString *buffer)
 
static void float_to_string (double value, GString *buffer)
 
static void value_to_string (FlValue *value, GString *buffer)
 
G_MODULE_EXPORT FlValuefl_value_new_null ()
 
G_MODULE_EXPORT FlValuefl_value_new_bool (bool value)
 
G_MODULE_EXPORT FlValuefl_value_new_int (int64_t value)
 
G_MODULE_EXPORT FlValuefl_value_new_float (double value)
 
G_MODULE_EXPORT FlValuefl_value_new_string (const gchar *value)
 
G_MODULE_EXPORT FlValuefl_value_new_string_sized (const gchar *value, size_t value_length)
 
G_MODULE_EXPORT FlValuefl_value_new_uint8_list (const uint8_t *data, size_t data_length)
 
G_MODULE_EXPORT FlValuefl_value_new_uint8_list_from_bytes (GBytes *data)
 
G_MODULE_EXPORT FlValuefl_value_new_int32_list (const int32_t *data, size_t data_length)
 
G_MODULE_EXPORT FlValuefl_value_new_int64_list (const int64_t *data, size_t data_length)
 
G_MODULE_EXPORT FlValuefl_value_new_float32_list (const float *data, size_t data_length)
 
G_MODULE_EXPORT FlValuefl_value_new_float_list (const double *data, size_t data_length)
 
G_MODULE_EXPORT FlValuefl_value_new_list ()
 
G_MODULE_EXPORT FlValuefl_value_new_list_from_strv (const gchar *const *str_array)
 
G_MODULE_EXPORT FlValuefl_value_new_map ()
 
G_MODULE_EXPORT FlValuefl_value_new_custom (int type, gconstpointer value, GDestroyNotify destroy_notify)
 
G_MODULE_EXPORT FlValuefl_value_new_custom_object (int type, GObject *object)
 
G_MODULE_EXPORT FlValuefl_value_new_custom_object_take (int type, GObject *object)
 
G_MODULE_EXPORT FlValuefl_value_ref (FlValue *self)
 
G_MODULE_EXPORT void fl_value_unref (FlValue *self)
 
G_MODULE_EXPORT FlValueType fl_value_get_type (FlValue *self)
 
G_MODULE_EXPORT bool fl_value_equal (FlValue *a, FlValue *b)
 
G_MODULE_EXPORT void fl_value_append (FlValue *self, FlValue *value)
 
G_MODULE_EXPORT void fl_value_append_take (FlValue *self, FlValue *value)
 
G_MODULE_EXPORT void fl_value_set (FlValue *self, FlValue *key, FlValue *value)
 
G_MODULE_EXPORT void fl_value_set_take (FlValue *self, FlValue *key, FlValue *value)
 
G_MODULE_EXPORT void fl_value_set_string (FlValue *self, const gchar *key, FlValue *value)
 
G_MODULE_EXPORT void fl_value_set_string_take (FlValue *self, const gchar *key, FlValue *value)
 
G_MODULE_EXPORT bool fl_value_get_bool (FlValue *self)
 
G_MODULE_EXPORT int64_t fl_value_get_int (FlValue *self)
 
G_MODULE_EXPORT double fl_value_get_float (FlValue *self)
 
const G_MODULE_EXPORT gchar * fl_value_get_string (FlValue *self)
 
const G_MODULE_EXPORT uint8_t * fl_value_get_uint8_list (FlValue *self)
 
const G_MODULE_EXPORT int32_t * fl_value_get_int32_list (FlValue *self)
 
const G_MODULE_EXPORT int64_t * fl_value_get_int64_list (FlValue *self)
 
const G_MODULE_EXPORT float * fl_value_get_float32_list (FlValue *self)
 
const G_MODULE_EXPORT double * fl_value_get_float_list (FlValue *self)
 
G_MODULE_EXPORT size_t fl_value_get_length (FlValue *self)
 
G_MODULE_EXPORT FlValuefl_value_get_list_value (FlValue *self, size_t index)
 
G_MODULE_EXPORT FlValuefl_value_get_map_key (FlValue *self, size_t index)
 
G_MODULE_EXPORT FlValuefl_value_get_map_value (FlValue *self, size_t index)
 
G_MODULE_EXPORT FlValuefl_value_lookup (FlValue *self, FlValue *key)
 
G_MODULE_EXPORT FlValuefl_value_lookup_string (FlValue *self, const gchar *key)
 
G_MODULE_EXPORT int fl_value_get_custom_type (FlValue *self)
 
G_MODULE_EXPORT gconstpointer fl_value_get_custom_value (FlValue *self)
 
G_MODULE_EXPORT GObject * fl_value_get_custom_value_object (FlValue *self)
 
G_MODULE_EXPORT gchar * fl_value_to_string (FlValue *value)
 

Function Documentation

◆ fl_value_append()

G_MODULE_EXPORT void fl_value_append ( FlValue value,
FlValue child 
)

fl_value_append: @value: an FlValue of type FL_VALUE_TYPE_LIST. @child: an FlValue.

Adds @child to the end of @value. Calling this with an FlValue that is not of type FL_VALUE_TYPE_LIST is a programming error.

Definition at line 592 of file fl_value.cc.

592  {
593  g_return_if_fail(self != nullptr);
594  g_return_if_fail(self->type == FL_VALUE_TYPE_LIST);
595  g_return_if_fail(value != nullptr);
596 
598 }

References fl_value_append_take(), fl_value_ref(), FL_VALUE_TYPE_LIST, and value.

Referenced by FlValueHandler::add(), cancel_channel(), listen_channel(), read_list_value(), TEST(), update_editing_state(), and update_editing_state_with_delta().

◆ fl_value_append_take()

G_MODULE_EXPORT void fl_value_append_take ( FlValue value,
FlValue child 
)

fl_value_append_take: @value: an FlValue of type FL_VALUE_TYPE_LIST. @child: (transfer full): an FlValue.

Adds @child to the end of @value. Ownership of @child is taken by @value. Calling this with an FlValue that is not of type FL_VALUE_TYPE_LIST is a programming error.

Definition at line 600 of file fl_value.cc.

600  {
601  g_return_if_fail(self != nullptr);
602  g_return_if_fail(self->type == FL_VALUE_TYPE_LIST);
603  g_return_if_fail(value != nullptr);
604 
605  FlValueList* v = reinterpret_cast<FlValueList*>(self);
606  g_ptr_array_add(v->values, value);
607 }

References FL_VALUE_TYPE_LIST, value, and FlValueList::values.

Referenced by build_list(), cancel_channel(), fl_json_method_codec_encode_error_envelope(), fl_json_method_codec_encode_success_envelope(), fl_value_append(), fl_value_new_list_from_strv(), listen_channel(), perform_action(), resize_channel(), set_warns_on_channel_overflow(), TEST(), update_editing_state(), and update_editing_state_with_delta().

◆ fl_value_destroy()

static void fl_value_destroy ( gpointer  value)
static

Definition at line 92 of file fl_value.cc.

92  {
93  fl_value_unref(static_cast<FlValue*>(value));
94 }

References fl_value_unref(), and value.

Referenced by fl_value_new_list(), fl_value_new_map(), and fl_value_set_take().

◆ fl_value_equal()

G_MODULE_EXPORT bool fl_value_equal ( FlValue a,
FlValue b 
)

fl_value_equal: : an FlValue. : an FlValue.

Compares two FlValue to see if they are equivalent. Two values are considered equivalent if they are of the same type and their data is the same including any child values. For values of type FL_VALUE_TYPE_MAP the order of the values does not matter.

Returns: TRUE if both values are equivalent.

Definition at line 471 of file fl_value.cc.

471  {
472  g_return_val_if_fail(a != nullptr, false);
473  g_return_val_if_fail(b != nullptr, false);
474 
475  if (a->type != b->type) {
476  return false;
477  }
478 
479  switch (a->type) {
480  case FL_VALUE_TYPE_NULL:
481  return true;
482  case FL_VALUE_TYPE_BOOL:
483  return fl_value_get_bool(a) == fl_value_get_bool(b);
484  case FL_VALUE_TYPE_INT:
485  return fl_value_get_int(a) == fl_value_get_int(b);
486  case FL_VALUE_TYPE_FLOAT:
487  return fl_value_get_float(a) == fl_value_get_float(b);
488  case FL_VALUE_TYPE_STRING: {
489  FlValueString* a_ = reinterpret_cast<FlValueString*>(a);
490  FlValueString* b_ = reinterpret_cast<FlValueString*>(b);
491  return g_strcmp0(a_->value, b_->value) == 0;
492  }
495  return false;
496  }
497  const uint8_t* values_a = fl_value_get_uint8_list(a);
498  const uint8_t* values_b = fl_value_get_uint8_list(b);
499  for (size_t i = 0; i < fl_value_get_length(a); i++) {
500  if (values_a[i] != values_b[i]) {
501  return false;
502  }
503  }
504  return true;
505  }
508  return false;
509  }
510  const int32_t* values_a = fl_value_get_int32_list(a);
511  const int32_t* values_b = fl_value_get_int32_list(b);
512  for (size_t i = 0; i < fl_value_get_length(a); i++) {
513  if (values_a[i] != values_b[i]) {
514  return false;
515  }
516  }
517  return true;
518  }
521  return false;
522  }
523  const int64_t* values_a = fl_value_get_int64_list(a);
524  const int64_t* values_b = fl_value_get_int64_list(b);
525  for (size_t i = 0; i < fl_value_get_length(a); i++) {
526  if (values_a[i] != values_b[i]) {
527  return false;
528  }
529  }
530  return true;
531  }
534  return false;
535  }
536  const float* values_a = fl_value_get_float32_list(a);
537  const float* values_b = fl_value_get_float32_list(b);
538  for (size_t i = 0; i < fl_value_get_length(a); i++) {
539  if (values_a[i] != values_b[i]) {
540  return false;
541  }
542  }
543  return true;
544  }
547  return false;
548  }
549  const double* values_a = fl_value_get_float_list(a);
550  const double* values_b = fl_value_get_float_list(b);
551  for (size_t i = 0; i < fl_value_get_length(a); i++) {
552  if (values_a[i] != values_b[i]) {
553  return false;
554  }
555  }
556  return true;
557  }
558  case FL_VALUE_TYPE_LIST: {
560  return false;
561  }
562  for (size_t i = 0; i < fl_value_get_length(a); i++) {
564  fl_value_get_list_value(b, i))) {
565  return false;
566  }
567  }
568  return true;
569  }
570  case FL_VALUE_TYPE_MAP: {
572  return false;
573  }
574  for (size_t i = 0; i < fl_value_get_length(a); i++) {
575  FlValue* key = fl_value_get_map_key(a, i);
576  FlValue* value_b = fl_value_lookup(b, key);
577  if (value_b == nullptr) {
578  return false;
579  }
580  FlValue* value_a = fl_value_get_map_value(a, i);
581  if (!fl_value_equal(value_a, value_b)) {
582  return false;
583  }
584  }
585  return true;
586  }
588  return false;
589  }
590 }

References fl_value_equal(), fl_value_get_bool(), fl_value_get_float(), fl_value_get_float32_list(), fl_value_get_float_list(), fl_value_get_int(), fl_value_get_int32_list(), fl_value_get_int64_list(), fl_value_get_length(), fl_value_get_list_value(), fl_value_get_map_key(), fl_value_get_map_value(), fl_value_get_uint8_list(), fl_value_lookup(), FL_VALUE_TYPE_BOOL, FL_VALUE_TYPE_CUSTOM, FL_VALUE_TYPE_FLOAT, FL_VALUE_TYPE_FLOAT32_LIST, FL_VALUE_TYPE_FLOAT_LIST, FL_VALUE_TYPE_INT, FL_VALUE_TYPE_INT32_LIST, FL_VALUE_TYPE_INT64_LIST, FL_VALUE_TYPE_LIST, FL_VALUE_TYPE_MAP, FL_VALUE_TYPE_NULL, FL_VALUE_TYPE_STRING, FL_VALUE_TYPE_UINT8_LIST, i, and FlValueString::value.

Referenced by args_cancel_cb(), args_listen_cb(), decode_response_with_error(), decode_response_with_success(), fl_value_equal(), fl_value_lookup_index(), MATCHER_P(), MATCHER_P2(), and TEST().

◆ fl_value_get_bool()

G_MODULE_EXPORT bool fl_value_get_bool ( FlValue value)

fl_value_get_bool: @value: an FlValue of type FL_VALUE_TYPE_BOOL.

Gets the boolean value of @value. Calling this with an FlValue that is not of type FL_VALUE_TYPE_BOOL is a programming error.

Returns: a boolean value.

Definition at line 661 of file fl_value.cc.

661  {
662  g_return_val_if_fail(self != nullptr, FALSE);
663  g_return_val_if_fail(self->type == FL_VALUE_TYPE_BOOL, FALSE);
664  FlValueBool* v = reinterpret_cast<FlValueBool*>(self);
665  return v->value;
666 }

References FL_VALUE_TYPE_BOOL, and FlValueBool::value.

Referenced by fl_standard_message_codec_real_write_value(), fl_value_equal(), G_DEFINE_TYPE(), handle_response(), set_client(), TEST(), and value_to_string().

◆ fl_value_get_custom_type()

G_MODULE_EXPORT int fl_value_get_custom_type ( FlValue value)

fl_value_get_custom_type: @value: an FlValue of type FL_VALUE_TYPE_CUSTOM.

Gets the type ID for this custom type.

Returns: a type ID.

Definition at line 822 of file fl_value.cc.

822  {
823  g_return_val_if_fail(self != nullptr, -1);
824  g_return_val_if_fail(self->type == FL_VALUE_TYPE_CUSTOM, -1);
825 
826  FlValueCustom* v = reinterpret_cast<FlValueCustom*>(self);
827  return v->type;
828 }

References FL_VALUE_TYPE_CUSTOM, and FlValueCustom::type.

Referenced by fl_test_method_message_codec_write_value(), fl_test_standard_message_codec_write_value(), TEST(), and value_to_string().

◆ fl_value_get_custom_value()

G_MODULE_EXPORT gconstpointer fl_value_get_custom_value ( FlValue value)

fl_value_get_custom_value: @value: an FlValue of type FL_VALUE_TYPE_CUSTOM.

Gets the address of the custom value.

Returns: a pointer to the custom value.

Definition at line 830 of file fl_value.cc.

830  {
831  g_return_val_if_fail(self != nullptr, nullptr);
832  g_return_val_if_fail(self->type == FL_VALUE_TYPE_CUSTOM, nullptr);
833 
834  FlValueCustom* v = reinterpret_cast<FlValueCustom*>(self);
835  return v->value;
836 }

References FL_VALUE_TYPE_CUSTOM, and FlValueCustom::value.

Referenced by TEST().

◆ fl_value_get_custom_value_object()

G_MODULE_EXPORT GObject* fl_value_get_custom_value_object ( FlValue value)

fl_value_get_custom_value_object: @value: an FlValue of type FL_VALUE_TYPE_CUSTOM.

Gets the custom value as an object.

Returns: an object.

Definition at line 838 of file fl_value.cc.

838  {
839  g_return_val_if_fail(self != nullptr, nullptr);
840  g_return_val_if_fail(self->type == FL_VALUE_TYPE_CUSTOM, nullptr);
841 
842  FlValueCustom* v = reinterpret_cast<FlValueCustom*>(self);
843  return G_OBJECT(v->value);
844 }

References FL_VALUE_TYPE_CUSTOM, and FlValueCustom::value.

Referenced by TEST().

◆ fl_value_get_float()

G_MODULE_EXPORT double fl_value_get_float ( FlValue value)

fl_value_get_float: @value: an FlValue of type FL_VALUE_TYPE_FLOAT.

Gets the floating point number of @value. Calling this with an FlValue that is not of type FL_VALUE_TYPE_FLOAT is a programming error.

Returns: a floating point number.

Definition at line 675 of file fl_value.cc.

675  {
676  g_return_val_if_fail(self != nullptr, 0.0);
677  g_return_val_if_fail(self->type == FL_VALUE_TYPE_FLOAT, 0.0);
678  FlValueDouble* v = reinterpret_cast<FlValueDouble*>(self);
679  return v->value;
680 }

References FL_VALUE_TYPE_FLOAT, and FlValueDouble::value.

Referenced by fl_standard_message_codec_real_write_value(), fl_value_equal(), G_DEFINE_TYPE(), set_editable_size_and_transform(), set_marked_text_rect(), TEST(), and value_to_string().

◆ fl_value_get_float32_list()

const G_MODULE_EXPORT float* fl_value_get_float32_list ( FlValue value)

fl_value_get_float32_list: @value: an FlValue of type FL_VALUE_TYPE_FLOAT32_LIST.

Gets the array of floating point numbers @value contains. The data contains fl_value_get_length() elements. Calling this with an FlValue that is not of type FL_VALUE_TYPE_FLOAT32_LIST is a programming error.

Returns: an array of floating point numbers.

Definition at line 710 of file fl_value.cc.

710  {
711  g_return_val_if_fail(self != nullptr, nullptr);
712  g_return_val_if_fail(self->type == FL_VALUE_TYPE_FLOAT32_LIST, nullptr);
713  FlValueFloat32List* v = reinterpret_cast<FlValueFloat32List*>(self);
714  return v->values;
715 }

References FL_VALUE_TYPE_FLOAT32_LIST, and FlValueFloat32List::values.

Referenced by fl_standard_message_codec_real_write_value(), fl_value_equal(), TEST(), and value_to_string().

◆ fl_value_get_float_list()

const G_MODULE_EXPORT double* fl_value_get_float_list ( FlValue value)

fl_value_get_float_list: @value: an FlValue of type FL_VALUE_TYPE_FLOAT_LIST.

Gets the array of floating point numbers @value contains. The data contains fl_value_get_length() elements. Calling this with an FlValue that is not of type FL_VALUE_TYPE_FLOAT_LIST is a programming error.

Returns: an array of floating point numbers.

Definition at line 717 of file fl_value.cc.

717  {
718  g_return_val_if_fail(self != nullptr, nullptr);
719  g_return_val_if_fail(self->type == FL_VALUE_TYPE_FLOAT_LIST, nullptr);
720  FlValueFloatList* v = reinterpret_cast<FlValueFloatList*>(self);
721  return v->values;
722 }

References FL_VALUE_TYPE_FLOAT_LIST, and FlValueFloatList::values.

Referenced by fl_standard_message_codec_real_write_value(), fl_value_equal(), G_DEFINE_TYPE(), TEST(), and value_to_string().

◆ fl_value_get_int()

G_MODULE_EXPORT int64_t fl_value_get_int ( FlValue value)

fl_value_get_int: @value: an FlValue of type FL_VALUE_TYPE_INT.

Gets the integer number of @value. Calling this with an FlValue that is not of type FL_VALUE_TYPE_INT is a programming error.

Returns: an integer number.

Definition at line 668 of file fl_value.cc.

668  {
669  g_return_val_if_fail(self != nullptr, 0);
670  g_return_val_if_fail(self->type == FL_VALUE_TYPE_INT, 0);
671  FlValueInt* v = reinterpret_cast<FlValueInt*>(self);
672  return v->value;
673 }

References FL_VALUE_TYPE_INT, and FlValueInt::value.

Referenced by fl_standard_message_codec_real_write_value(), fl_test_codec_encode_error_envelope(), fl_test_codec_encode_message(), fl_test_codec_encode_method_call(), fl_test_codec_encode_success_envelope(), fl_value_equal(), G_DEFINE_TYPE(), send_events_events_cb(), set_client(), set_editing_state(), TEST(), and value_to_string().

◆ fl_value_get_int32_list()

const G_MODULE_EXPORT int32_t* fl_value_get_int32_list ( FlValue value)

fl_value_get_int32_list: @value: an FlValue of type FL_VALUE_TYPE_INT32_LIST.

Gets the array of 32 bit integers @value contains. The data contains fl_value_get_length() elements. Calling this with an FlValue that is not of type FL_VALUE_TYPE_INT32_LIST is a programming error.

Returns: an array of 32 bit integers.

Definition at line 696 of file fl_value.cc.

696  {
697  g_return_val_if_fail(self != nullptr, nullptr);
698  g_return_val_if_fail(self->type == FL_VALUE_TYPE_INT32_LIST, nullptr);
699  FlValueInt32List* v = reinterpret_cast<FlValueInt32List*>(self);
700  return v->values;
701 }

References FL_VALUE_TYPE_INT32_LIST, and FlValueInt32List::values.

Referenced by fl_standard_message_codec_real_write_value(), fl_value_equal(), fl_view_accessible_handle_update_semantics(), G_DEFINE_TYPE(), TEST(), and value_to_string().

◆ fl_value_get_int64_list()

const G_MODULE_EXPORT int64_t* fl_value_get_int64_list ( FlValue value)

fl_value_get_int64_list: @value: an FlValue of type FL_VALUE_TYPE_INT64_LIST.

Gets the array of 64 bit integers @value contains. The data contains fl_value_get_length() elements. Calling this with an FlValue that is not of type FL_VALUE_TYPE_INT64_LIST is a programming error.

Returns: an array of 64 bit integers.

Definition at line 703 of file fl_value.cc.

703  {
704  g_return_val_if_fail(self != nullptr, nullptr);
705  g_return_val_if_fail(self->type == FL_VALUE_TYPE_INT64_LIST, nullptr);
706  FlValueInt64List* v = reinterpret_cast<FlValueInt64List*>(self);
707  return v->values;
708 }

References FL_VALUE_TYPE_INT64_LIST, and FlValueInt64List::values.

Referenced by fl_standard_message_codec_real_write_value(), fl_value_equal(), G_DEFINE_TYPE(), TEST(), and value_to_string().

◆ fl_value_get_length()

G_MODULE_EXPORT size_t fl_value_get_length ( FlValue value)

fl_value_get_length: @value: an FlValue of type FL_VALUE_TYPE_UINT8_LIST, FL_VALUE_TYPE_INT32_LIST, FL_VALUE_TYPE_INT64_LIST, FL_VALUE_TYPE_FLOAT32_LIST, FL_VALUE_TYPE_FLOAT_LIST, FL_VALUE_TYPE_LIST or FL_VALUE_TYPE_MAP.

Gets the number of elements @value contains. This is only valid for list and map types. Calling this with other types is a programming error.

Returns: the number of elements inside @value.

Definition at line 724 of file fl_value.cc.

724  {
725  g_return_val_if_fail(self != nullptr, 0);
726  g_return_val_if_fail(self->type == FL_VALUE_TYPE_UINT8_LIST ||
727  self->type == FL_VALUE_TYPE_INT32_LIST ||
728  self->type == FL_VALUE_TYPE_INT64_LIST ||
729  self->type == FL_VALUE_TYPE_FLOAT32_LIST ||
730  self->type == FL_VALUE_TYPE_FLOAT_LIST ||
731  self->type == FL_VALUE_TYPE_LIST ||
732  self->type == FL_VALUE_TYPE_MAP,
733  0);
734 
735  switch (self->type) {
737  FlValueUint8List* v = reinterpret_cast<FlValueUint8List*>(self);
738  return v->values_length;
739  }
741  FlValueInt32List* v = reinterpret_cast<FlValueInt32List*>(self);
742  return v->values_length;
743  }
745  FlValueInt64List* v = reinterpret_cast<FlValueInt64List*>(self);
746  return v->values_length;
747  }
749  FlValueFloat32List* v = reinterpret_cast<FlValueFloat32List*>(self);
750  return v->values_length;
751  }
753  FlValueFloatList* v = reinterpret_cast<FlValueFloatList*>(self);
754  return v->values_length;
755  }
756  case FL_VALUE_TYPE_LIST: {
757  FlValueList* v = reinterpret_cast<FlValueList*>(self);
758  return v->values->len;
759  }
760  case FL_VALUE_TYPE_MAP: {
761  FlValueMap* v = reinterpret_cast<FlValueMap*>(self);
762  return v->keys->len;
763  }
764  case FL_VALUE_TYPE_NULL:
765  case FL_VALUE_TYPE_BOOL:
766  case FL_VALUE_TYPE_INT:
767  case FL_VALUE_TYPE_FLOAT:
770  return 0;
771  }
772 
773  return 0;
774 }

References FL_VALUE_TYPE_BOOL, FL_VALUE_TYPE_CUSTOM, FL_VALUE_TYPE_FLOAT, FL_VALUE_TYPE_FLOAT32_LIST, FL_VALUE_TYPE_FLOAT_LIST, FL_VALUE_TYPE_INT, FL_VALUE_TYPE_INT32_LIST, FL_VALUE_TYPE_INT64_LIST, FL_VALUE_TYPE_LIST, FL_VALUE_TYPE_MAP, FL_VALUE_TYPE_NULL, FL_VALUE_TYPE_STRING, FL_VALUE_TYPE_UINT8_LIST, FlValueMap::keys, FlValueList::values, FlValueUint8List::values_length, FlValueInt32List::values_length, FlValueInt64List::values_length, FlValueFloat32List::values_length, and FlValueFloatList::values_length.

Referenced by fl_binary_codec_encode_message(), fl_json_method_codec_decode_response(), fl_standard_message_codec_real_write_value(), fl_value_equal(), fl_value_lookup_index(), fl_view_accessible_handle_update_semantics(), G_DEFINE_TYPE(), set_client(), set_editable_size_and_transform(), TEST(), and value_to_string().

◆ fl_value_get_list_value()

G_MODULE_EXPORT FlValue* fl_value_get_list_value ( FlValue value,
size_t  index 
)

fl_value_get_list_value: @value: an FlValue of type FL_VALUE_TYPE_LIST. @index: an index in the list.

Gets a child element of the list. It is a programming error to request an index that is outside the size of the list as returned from fl_value_get_length(). Calling this with an FlValue that is not of type FL_VALUE_TYPE_LIST is a programming error.

Returns: an FlValue.

Definition at line 776 of file fl_value.cc.

776  {
777  g_return_val_if_fail(self != nullptr, nullptr);
778  g_return_val_if_fail(self->type == FL_VALUE_TYPE_LIST, nullptr);
779 
780  FlValueList* v = reinterpret_cast<FlValueList*>(self);
781  return static_cast<FlValue*>(g_ptr_array_index(v->values, index));
782 }

References FL_VALUE_TYPE_LIST, and FlValueList::values.

Referenced by fl_json_method_codec_decode_response(), fl_standard_message_codec_real_write_value(), fl_value_equal(), G_DEFINE_TYPE(), set_client(), set_editable_size_and_transform(), TEST(), and value_to_string().

◆ fl_value_get_map_key()

G_MODULE_EXPORT FlValue* fl_value_get_map_key ( FlValue value,
size_t  index 
)

fl_value_get_map_key: @value: an FlValue of type FL_VALUE_TYPE_MAP. @index: an index in the map.

Gets a key from the map. It is a programming error to request an index that is outside the size of the list as returned from fl_value_get_length(). Calling this with an FlValue that is not of type FL_VALUE_TYPE_MAP is a programming error.

Returns: an FlValue.

Definition at line 784 of file fl_value.cc.

784  {
785  g_return_val_if_fail(self != nullptr, nullptr);
786  g_return_val_if_fail(self->type == FL_VALUE_TYPE_MAP, nullptr);
787 
788  FlValueMap* v = reinterpret_cast<FlValueMap*>(self);
789  return static_cast<FlValue*>(g_ptr_array_index(v->keys, index));
790 }

References FL_VALUE_TYPE_MAP, and FlValueMap::keys.

Referenced by fl_standard_message_codec_real_write_value(), fl_value_equal(), fl_value_lookup_index(), G_DEFINE_TYPE(), TEST(), and value_to_string().

◆ fl_value_get_map_value()

G_MODULE_EXPORT FlValue* fl_value_get_map_value ( FlValue value,
size_t  index 
)

fl_value_get_map_value: @value: an FlValue of type FL_VALUE_TYPE_MAP. @index: an index in the map.

Gets a value from the map. It is a programming error to request an index that is outside the size of the list as returned from fl_value_get_length(). Calling this with an FlValue that is not of type FL_VALUE_TYPE_MAP is a programming error.

Returns: an FlValue.

Definition at line 792 of file fl_value.cc.

792  {
793  g_return_val_if_fail(self != nullptr, nullptr);
794  g_return_val_if_fail(self->type == FL_VALUE_TYPE_MAP, nullptr);
795 
796  FlValueMap* v = reinterpret_cast<FlValueMap*>(self);
797  return static_cast<FlValue*>(g_ptr_array_index(v->values, index));
798 }

References FL_VALUE_TYPE_MAP, and FlValueMap::values.

Referenced by fl_standard_message_codec_real_write_value(), fl_value_equal(), fl_value_lookup(), G_DEFINE_TYPE(), TEST(), and value_to_string().

◆ fl_value_get_string()

◆ fl_value_get_type()

◆ fl_value_get_uint8_list()

const G_MODULE_EXPORT uint8_t* fl_value_get_uint8_list ( FlValue value)

fl_value_get_uint8_list: @value: an FlValue of type FL_VALUE_TYPE_UINT8_LIST.

Gets the array of unisigned 8 bit integers @value contains. The data contains fl_value_get_length() elements. Calling this with an FlValue that is not of type FL_VALUE_TYPE_UINT8_LIST is a programming error.

Returns: an array of unsigned 8 bit integers.

Definition at line 689 of file fl_value.cc.

689  {
690  g_return_val_if_fail(self != nullptr, nullptr);
691  g_return_val_if_fail(self->type == FL_VALUE_TYPE_UINT8_LIST, nullptr);
692  FlValueUint8List* v = reinterpret_cast<FlValueUint8List*>(self);
693  return v->values;
694 }

References FL_VALUE_TYPE_UINT8_LIST, and FlValueUint8List::values.

Referenced by fl_binary_codec_encode_message(), fl_standard_message_codec_real_write_value(), fl_value_equal(), G_DEFINE_TYPE(), TEST(), and value_to_string().

◆ fl_value_lookup()

G_MODULE_EXPORT FlValue* fl_value_lookup ( FlValue value,
FlValue key 
)

fl_value_lookup: @value: an FlValue of type FL_VALUE_TYPE_MAP. @key: a key value.

Gets the map entry that matches @key. Keys are checked using fl_value_equal(). Calling this with an FlValue that is not of type FL_VALUE_TYPE_MAP is a programming error.

Map lookups are not optimized for performance - if you have a large map or need frequent access you should copy the data into another structure, e.g. #GHashTable.

Returns: (allow-none): the value with this key or NULL if not one present.

Definition at line 800 of file fl_value.cc.

800  {
801  g_return_val_if_fail(self != nullptr, nullptr);
802  g_return_val_if_fail(self->type == FL_VALUE_TYPE_MAP, nullptr);
803 
804  ssize_t index = fl_value_lookup_index(self, key);
805  if (index < 0) {
806  return nullptr;
807  }
808  return fl_value_get_map_value(self, index);
809 }

References fl_value_get_map_value(), fl_value_lookup_index(), and FL_VALUE_TYPE_MAP.

Referenced by fl_value_equal(), fl_value_lookup_string(), and TEST().

◆ fl_value_lookup_index()

static ssize_t fl_value_lookup_index ( FlValue self,
FlValue key 
)
static

Definition at line 99 of file fl_value.cc.

99  {
100  g_return_val_if_fail(self->type == FL_VALUE_TYPE_MAP, -1);
101 
102  for (size_t i = 0; i < fl_value_get_length(self); i++) {
103  FlValue* k = fl_value_get_map_key(self, i);
104  if (fl_value_equal(k, key)) {
105  return i;
106  }
107  }
108  return -1;
109 }

References fl_value_equal(), fl_value_get_length(), fl_value_get_map_key(), FL_VALUE_TYPE_MAP, and i.

Referenced by fl_value_lookup(), and fl_value_set_take().

◆ fl_value_lookup_string()

G_MODULE_EXPORT FlValue* fl_value_lookup_string ( FlValue value,
const gchar *  key 
)

fl_value_lookup_string: @value: an FlValue of type FL_VALUE_TYPE_MAP. @key: a key value.

Gets the map entry that matches @key. Keys are checked using fl_value_equal(). Calling this with an FlValue that is not of type FL_VALUE_TYPE_MAP is a programming error.

Map lookups are not optimized for performance - if you have a large map or need frequent access you should copy the data into another structure, e.g. #GHashTable.

Returns: (allow-none): the value with this key or NULL if not one present.

Definition at line 811 of file fl_value.cc.

812  {
813  g_return_val_if_fail(self != nullptr, nullptr);
814  FlValue* string_key = fl_value_new_string(key);
815  FlValue* value = fl_value_lookup(self, string_key);
816  // Explicit unref used because the g_autoptr is triggering a false positive
817  // with clang-tidy.
818  fl_value_unref(string_key);
819  return value;
820 }

References fl_value_lookup(), fl_value_new_string(), fl_value_unref(), and value.

Referenced by activate_system_cursor(), clipboard_set_data(), fl_json_method_codec_decode_method_call(), get_exit_response(), handle_response(), MATCHER_P2(), set_client(), set_editable_size_and_transform(), set_editing_state(), set_marked_text_rect(), system_exit_application(), and TEST().

◆ fl_value_new()

static FlValue* fl_value_new ( FlValueType  type,
size_t  size 
)
static

◆ fl_value_new_bool()

G_MODULE_EXPORT FlValue* fl_value_new_bool ( bool  value)

fl_value_new_bool: @value: the value.

Creates an FlValue that contains a boolean value. The equivalent Dart type is a bool.

Returns: a new FlValue.

Definition at line 255 of file fl_value.cc.

255  {
256  FlValueBool* self = reinterpret_cast<FlValueBool*>(
258  self->value = value ? true : false;
259  return reinterpret_cast<FlValue*>(self);
260 }

References fl_value_new(), FL_VALUE_TYPE_BOOL, FlValueBool::value, and value.

Referenced by FlValueHandler::Bool(), build_editing_delta(), build_editing_state(), build_input_config(), clipboard_text_has_strings_cb(), echo_response_cb(), encode_bool(), fl_accessible_text_field_perform_action(), fl_standard_message_codec_read_value_of_type(), set_warns_on_channel_overflow(), TEST(), update_editing_state(), update_editing_state_with_delta(), and update_settings().

◆ fl_value_new_custom()

G_MODULE_EXPORT FlValue* fl_value_new_custom ( int  type,
gconstpointer  value,
GDestroyNotify  destroy_notify 
)

fl_value_new_custom: @type: an ID for this type. @value: pointer to the custom value. @destroy_notify: function to call when @value is no longer required.

Creates a new custom data type. The Dart side of the channel must have equivalent custom code to access this object.

Returns: a new FlValue.

Definition at line 374 of file fl_value.cc.

376  {
377  FlValueCustom* self = reinterpret_cast<FlValueCustom*>(
379  self->type = type;
380  self->value = value;
381  self->destroy_notify = destroy_notify;
382  return reinterpret_cast<FlValue*>(self);
383 }

References fl_value_new(), FL_VALUE_TYPE_CUSTOM, FlValueCustom::type, type, and value.

Referenced by fl_value_new_custom_object(), fl_value_new_custom_object_take(), read_custom_value(), read_custom_value1(), read_custom_value2(), and TEST().

◆ fl_value_new_custom_object()

G_MODULE_EXPORT FlValue* fl_value_new_custom_object ( int  type,
GObject *  object 
)

fl_value_new_custom_object: @type: an ID for this type. @object: the custom object.

Creates a new custom data type. The Dart side of the channel must have equivalent custom code to access this object.

Returns: a new FlValue.

Definition at line 385 of file fl_value.cc.

385  {
386  return fl_value_new_custom(type, g_object_ref(object), g_object_unref);
387 }

References fl_value_new_custom(), and type.

Referenced by TEST().

◆ fl_value_new_custom_object_take()

G_MODULE_EXPORT FlValue* fl_value_new_custom_object_take ( int  type,
GObject *  object 
)

fl_value_new_custom_object_take: @type: an ID for this type. @object: (transfer full): the custom object.

Creates a new custom data type. The Dart side of the channel must have equivalent custom code to access this object. Ownership of @object is taken.

Returns: a new FlValue.

Definition at line 389 of file fl_value.cc.

390  {
391  return fl_value_new_custom(type, object, g_object_unref);
392 }

References fl_value_new_custom(), and type.

Referenced by TEST().

◆ fl_value_new_float()

G_MODULE_EXPORT FlValue* fl_value_new_float ( double  value)

fl_value_new_float: @value: the value.

Creates an FlValue that contains a floating point number. The equivalent Dart type is a num.

Returns: a new FlValue.

Definition at line 269 of file fl_value.cc.

269  {
270  FlValueDouble* self = reinterpret_cast<FlValueDouble*>(
272  self->value = value;
273  return reinterpret_cast<FlValue*>(self);
274 }

References fl_value_new(), FL_VALUE_TYPE_FLOAT, FlValueDouble::value, and value.

Referenced by FlValueHandler::Double(), encode_float(), read_float64_value(), TEST(), FlValueHandler::Uint64(), and update_settings().

◆ fl_value_new_float32_list()

G_MODULE_EXPORT FlValue* fl_value_new_float32_list ( const float *  value,
size_t  value_length 
)

fl_value_new_float32_list: @value: an array of floating point numbers. @value_length: number of elements in @value.

Creates an ordered list containing 32 bit floating point numbers. The equivalent Dart type is a Float32List.

Returns: a new FlValue.

Definition at line 329 of file fl_value.cc.

330  {
331  FlValueFloat32List* self = reinterpret_cast<FlValueFloat32List*>(
333  self->values_length = data_length;
334  self->values = static_cast<float*>(g_malloc(sizeof(float) * data_length));
335  memcpy(self->values, data, sizeof(float) * data_length);
336  return reinterpret_cast<FlValue*>(self);
337 }

References fl_value_new(), FL_VALUE_TYPE_FLOAT32_LIST, and FlValueFloat32List::values_length.

Referenced by read_float32_list_value(), and TEST().

◆ fl_value_new_float_list()

G_MODULE_EXPORT FlValue* fl_value_new_float_list ( const double *  value,
size_t  value_length 
)

fl_value_new_float_list: @value: an array of floating point numbers. @value_length: number of elements in @value.

Creates an ordered list containing floating point numbers. The equivalent Dart type is a Float64List.

Returns: a new FlValue.

Definition at line 339 of file fl_value.cc.

340  {
341  FlValueFloatList* self = reinterpret_cast<FlValueFloatList*>(
343  self->values_length = data_length;
344  self->values = static_cast<double*>(g_malloc(sizeof(double) * data_length));
345  memcpy(self->values, data, sizeof(double) * data_length);
346  return reinterpret_cast<FlValue*>(self);
347 }

References fl_value_new(), FL_VALUE_TYPE_FLOAT_LIST, and FlValueFloatList::values_length.

Referenced by read_float64_list_value(), and TEST().

◆ fl_value_new_int()

◆ fl_value_new_int32_list()

G_MODULE_EXPORT FlValue* fl_value_new_int32_list ( const int32_t *  value,
size_t  value_length 
)

fl_value_new_int32_list: @value: an array of signed 32 bit integers. @value_length: number of elements in @value.

Creates an ordered list containing 32 bit integers. The equivalent Dart type is a Int32List.

Returns: a new FlValue.

Definition at line 309 of file fl_value.cc.

310  {
311  FlValueInt32List* self = reinterpret_cast<FlValueInt32List*>(
313  self->values_length = data_length;
314  self->values = static_cast<int32_t*>(g_malloc(sizeof(int32_t) * data_length));
315  memcpy(self->values, data, sizeof(int32_t) * data_length);
316  return reinterpret_cast<FlValue*>(self);
317 }

References fl_value_new(), FL_VALUE_TYPE_INT32_LIST, and FlValueInt32List::values_length.

Referenced by fl_view_accessible_handle_update_semantics(), read_int32_list_value(), and TEST().

◆ fl_value_new_int64_list()

G_MODULE_EXPORT FlValue* fl_value_new_int64_list ( const int64_t *  value,
size_t  value_length 
)

fl_value_new_int64_list: @value: an array of signed 64 bit integers. @value_length: number of elements in @value.

Creates an ordered list containing 64 bit integers. The equivalent Dart type is a Int64List.

Returns: a new FlValue.

Definition at line 319 of file fl_value.cc.

320  {
321  FlValueInt64List* self = reinterpret_cast<FlValueInt64List*>(
323  self->values_length = data_length;
324  self->values = static_cast<int64_t*>(g_malloc(sizeof(int64_t) * data_length));
325  memcpy(self->values, data, sizeof(int64_t) * data_length);
326  return reinterpret_cast<FlValue*>(self);
327 }

References fl_value_new(), FL_VALUE_TYPE_INT64_LIST, and FlValueInt64List::values_length.

Referenced by read_int64_list_value(), and TEST().

◆ fl_value_new_list()

G_MODULE_EXPORT FlValue* fl_value_new_list ( )

fl_value_new_list:

Creates an ordered list. Children can be added to the list using fl_value_append(). The children are accessed using fl_value_get_length() and fl_value_get_list_value(). The equivalent Dart type is a List<dynamic>.

The following example shows a simple list of values:

|[ g_autoptr(FlValue) value = fl_value_new_list (); fl_value_append_take (value, fl_value_new_string ("one"); fl_value_append_take (value, fl_value_new_int (2); fl_value_append_take (value, fl_value_new_float (3.0); ]|

This value can be decoded using:

|[ g_assert (fl_value_get_type (value) == FL_VALUE_TYPE_LIST); for (size_t i = 0; i < fl_value_get_length (value); i++) { FlValue *child = fl_value_get_list_value (value, i); process_value (child); } ]|

Returns: a new FlValue.

Definition at line 349 of file fl_value.cc.

349  {
350  FlValueList* self = reinterpret_cast<FlValueList*>(
352  self->values = g_ptr_array_new_with_free_func(fl_value_destroy);
353  return reinterpret_cast<FlValue*>(self);
354 }

References fl_value_destroy(), fl_value_new(), FL_VALUE_TYPE_LIST, and FlValueList::values.

Referenced by build_list(), cancel_channel(), fl_json_method_codec_encode_error_envelope(), fl_json_method_codec_encode_success_envelope(), fl_value_new_list_from_strv(), listen_channel(), perform_action(), read_list_value(), resize_channel(), set_warns_on_channel_overflow(), FlValueHandler::StartArray(), TEST(), update_editing_state(), and update_editing_state_with_delta().

◆ fl_value_new_list_from_strv()

G_MODULE_EXPORT FlValue* fl_value_new_list_from_strv ( const gchar *const *  value)

fl_value_new_list_from_strv: @value: a NULL-terminated array of strings.

Creates an ordered list containing #FlString values.

Returns: a new FlValue.

Definition at line 356 of file fl_value.cc.

357  {
358  g_return_val_if_fail(str_array != nullptr, nullptr);
359  g_autoptr(FlValue) value = fl_value_new_list();
360  for (int i = 0; str_array[i] != nullptr; i++) {
362  }
363  return fl_value_ref(value);
364 }

References fl_value_append_take(), fl_value_new_list(), fl_value_new_string(), fl_value_ref(), i, and value.

Referenced by TEST().

◆ fl_value_new_map()

G_MODULE_EXPORT FlValue* fl_value_new_map ( )

fl_value_new_map:

Creates an ordered associative array. Children can be added to the map using fl_value_set(), fl_value_set_take(), fl_value_set_string(), fl_value_set_string_take(). The children are accessed using fl_value_get_length(), fl_value_get_map_key(), fl_value_get_map_value(), fl_value_lookup() and fl_value_lookup_string(). The equivalent Dart type is a Map<dynamic>.

The following example shows how to create a map of values keyed by strings:

|[ g_autoptr(FlValue) value = fl_value_new_map (); fl_value_set_string_take (value, "name", fl_value_new_string ("Gandalf")); fl_value_set_string_take (value, "occupation", fl_value_new_string ("Wizard")); fl_value_set_string_take (value, "age", fl_value_new_int (2019)); ]|

This value can be decoded using: |[ g_assert (fl_value_get_type (value) == FL_VALUE_TYPE_MAP); FlValue *name = fl_value_lookup_string (value, "name"); g_assert (fl_value_get_type (name) == FL_VALUE_TYPE_STRING); FlValue *age = fl_value_lookup_string (value, "age"); g_assert (fl_value_get_type (age) == FL_VALUE_TYPE_INT); g_message ("Next customer is %s (%d years old)", fl_value_get_string (name), fl_value_get_int (age)); ]|

Returns: a new FlValue.

Definition at line 366 of file fl_value.cc.

366  {
367  FlValueMap* self = reinterpret_cast<FlValueMap*>(
369  self->keys = g_ptr_array_new_with_free_func(fl_value_destroy);
370  self->values = g_ptr_array_new_with_free_func(fl_value_destroy);
371  return reinterpret_cast<FlValue*>(self);
372 }

References fl_value_destroy(), fl_value_new(), FL_VALUE_TYPE_MAP, and FlValueMap::keys.

Referenced by build_map(), clipboard_text_cb(), clipboard_text_has_strings_cb(), echo_response_cb(), fl_json_method_codec_encode_method_call(), fl_key_channel_responder_handle_event(), fl_test_application_activate(), get_keyboard_state(), perform_set_selection_action(), read_map_value(), request_app_exit(), request_app_exit_response_cb(), FlValueHandler::StartObject(), system_exit_application(), TEST(), update_editing_state(), update_editing_state_with_delta(), and update_settings().

◆ fl_value_new_null()

◆ fl_value_new_string()

G_MODULE_EXPORT FlValue* fl_value_new_string ( const gchar *  value)

◆ fl_value_new_string_sized()

G_MODULE_EXPORT FlValue* fl_value_new_string_sized ( const gchar *  value,
size_t  value_length 
)

fl_value_new_string_sized: @value: a buffer containing UTF-8 text. It does not require a nul terminator. @value_length: the number of bytes to use from @value.

Creates an FlValue that contains UTF-8 text. The equivalent Dart type is a String.

Returns: a new FlValue.

Definition at line 283 of file fl_value.cc.

284  {
285  FlValueString* self = reinterpret_cast<FlValueString*>(
287  self->value =
288  value_length == 0 ? g_strdup("") : g_strndup(value, value_length);
289  return reinterpret_cast<FlValue*>(self);
290 }

References fl_value_new(), FL_VALUE_TYPE_STRING, FlValueString::value, and value.

Referenced by fl_string_codec_decode_message(), FlValueHandler::Key(), read_string_value(), FlValueHandler::String(), and TEST().

◆ fl_value_new_uint8_list()

G_MODULE_EXPORT FlValue* fl_value_new_uint8_list ( const uint8_t *  value,
size_t  value_length 
)

fl_value_new_uint8_list: @value: an array of unsigned 8 bit integers. @value_length: number of elements in @value.

Creates an ordered list containing 8 bit unsigned integers. The data is copied. The equivalent Dart type is a Uint8List.

Returns: a new FlValue.

Definition at line 292 of file fl_value.cc.

293  {
294  FlValueUint8List* self = reinterpret_cast<FlValueUint8List*>(
296  self->values_length = data_length;
297  self->values = static_cast<uint8_t*>(g_malloc(sizeof(uint8_t) * data_length));
298  memcpy(self->values, data, sizeof(uint8_t) * data_length);
299  return reinterpret_cast<FlValue*>(self);
300 }

References fl_value_new(), FL_VALUE_TYPE_UINT8_LIST, and FlValueUint8List::values_length.

Referenced by fl_binary_codec_decode_message(), fl_value_new_uint8_list_from_bytes(), read_uint8_list_value(), and TEST().

◆ fl_value_new_uint8_list_from_bytes()

G_MODULE_EXPORT FlValue* fl_value_new_uint8_list_from_bytes ( GBytes *  value)

fl_value_new_uint8_list_from_bytes: @value: a #GBytes.

Creates an ordered list containing 8 bit unsigned integers. The data is copied. The equivalent Dart type is a Uint8List.

Returns: a new FlValue.

Definition at line 302 of file fl_value.cc.

302  {
303  gsize length;
304  const uint8_t* d =
305  static_cast<const uint8_t*>(g_bytes_get_data(data, &length));
306  return fl_value_new_uint8_list(d, length);
307 }

References fl_value_new_uint8_list(), and length.

◆ fl_value_ref()

◆ fl_value_set()

G_MODULE_EXPORT void fl_value_set ( FlValue value,
FlValue key,
FlValue child_value 
)

fl_value_set: @value: an FlValue of type FL_VALUE_TYPE_MAP. @key: an FlValue. @child_value: an FlValue.

Sets @key in @value to @child_value. If an existing value was in the map with the same key it is replaced. Calling this with an FlValue that is not of type FL_VALUE_TYPE_MAP is a programming error.

Definition at line 609 of file fl_value.cc.

609  {
610  g_return_if_fail(self != nullptr);
611  g_return_if_fail(self->type == FL_VALUE_TYPE_MAP);
612  g_return_if_fail(key != nullptr);
613  g_return_if_fail(value != nullptr);
614 
616 }

References fl_value_ref(), fl_value_set_take(), FL_VALUE_TYPE_MAP, and value.

Referenced by read_map_value(), and TEST().

◆ fl_value_set_string()

G_MODULE_EXPORT void fl_value_set_string ( FlValue value,
const gchar *  key,
FlValue child_value 
)

fl_value_set_string: @value: an FlValue of type FL_VALUE_TYPE_MAP. @key: a UTF-8 text key. @child_value: an FlValue.

Sets a value in the map with a text key. If an existing value was in the map with the same key it is replaced. Calling this with an FlValue that is not of type FL_VALUE_TYPE_MAP is a programming error.

Definition at line 639 of file fl_value.cc.

641  {
642  g_return_if_fail(self != nullptr);
643  g_return_if_fail(self->type == FL_VALUE_TYPE_MAP);
644  g_return_if_fail(key != nullptr);
645  g_return_if_fail(value != nullptr);
646 
648 }

References fl_value_new_string(), fl_value_ref(), fl_value_set_take(), FL_VALUE_TYPE_MAP, and value.

Referenced by TEST(), and update_editing_state_with_delta().

◆ fl_value_set_string_take()

G_MODULE_EXPORT void fl_value_set_string_take ( FlValue value,
const gchar *  key,
FlValue child_value 
)

fl_value_set_string_take: @value: an FlValue of type FL_VALUE_TYPE_MAP. @key: a UTF-8 text key. @child_value: (transfer full): an FlValue.

Sets a value in the map with a text key, taking ownership of the value. If an existing value was in the map with the same key it is replaced. Calling this with an FlValue that is not of type FL_VALUE_TYPE_MAP is a programming error.

Definition at line 650 of file fl_value.cc.

652  {
653  g_return_if_fail(self != nullptr);
654  g_return_if_fail(self->type == FL_VALUE_TYPE_MAP);
655  g_return_if_fail(key != nullptr);
656  g_return_if_fail(value != nullptr);
657 
659 }

References fl_value_new_string(), fl_value_set_take(), FL_VALUE_TYPE_MAP, and value.

Referenced by build_map(), clipboard_text_cb(), clipboard_text_has_strings_cb(), echo_response_cb(), fl_key_channel_responder_handle_event(), fl_test_application_activate(), perform_set_selection_action(), request_app_exit(), request_app_exit_response_cb(), system_exit_application(), TEST(), update_editing_state(), update_editing_state_with_delta(), and update_settings().

◆ fl_value_set_take()

G_MODULE_EXPORT void fl_value_set_take ( FlValue value,
FlValue key,
FlValue child_value 
)

fl_value_set_take: @value: an FlValue of type FL_VALUE_TYPE_MAP. @key: (transfer full): an FlValue. @child_value: (transfer full): an FlValue.

Sets @key in @value to @child_value. Ownership of both @key and @child_value is taken by @value. If an existing value was in the map with the same key it is replaced. Calling this with an FlValue that is not of type FL_VALUE_TYPE_MAP is a programming error.

Definition at line 618 of file fl_value.cc.

620  {
621  g_return_if_fail(self != nullptr);
622  g_return_if_fail(self->type == FL_VALUE_TYPE_MAP);
623  g_return_if_fail(key != nullptr);
624  g_return_if_fail(value != nullptr);
625 
626  FlValueMap* v = reinterpret_cast<FlValueMap*>(self);
627  ssize_t index = fl_value_lookup_index(self, key);
628  if (index < 0) {
629  g_ptr_array_add(v->keys, key);
630  g_ptr_array_add(v->values, value);
631  } else {
632  fl_value_destroy(v->keys->pdata[index]);
633  v->keys->pdata[index] = key;
634  fl_value_destroy(v->values->pdata[index]);
635  v->values->pdata[index] = value;
636  }
637 }

References fl_value_destroy(), fl_value_lookup_index(), FL_VALUE_TYPE_MAP, FlValueMap::keys, value, and FlValueMap::values.

Referenced by FlValueHandler::add(), fl_json_method_codec_encode_method_call(), fl_value_set(), fl_value_set_string(), fl_value_set_string_take(), get_keyboard_state(), and TEST().

◆ fl_value_to_string()

G_MODULE_EXPORT gchar* fl_value_to_string ( FlValue value)

fl_value_to_string: @value: an FlValue.

Converts an FlValue to a text representation, suitable for logging purposes. The text is formatted to be the equivalent of Dart toString() methods.

Returns: UTF-8 text.

Definition at line 846 of file fl_value.cc.

846  {
847  GString* buffer = g_string_new("");
849  return g_string_free(buffer, FALSE);
850 }

References buffer, value, and value_to_string().

Referenced by echo_response_cb(), fl_method_response_get_result(), and TEST().

◆ fl_value_unref()

G_MODULE_EXPORT void fl_value_unref ( FlValue value)

fl_value_unref: @value: an FlValue.

Decreases the reference count of an FlValue. When the reference count hits zero @value is destroyed and no longer valid.

Definition at line 400 of file fl_value.cc.

400  {
401  g_return_if_fail(self != nullptr);
402  g_return_if_fail(self->ref_count > 0);
403  self->ref_count--;
404  if (self->ref_count != 0) {
405  return;
406  }
407 
408  switch (self->type) {
409  case FL_VALUE_TYPE_STRING: {
410  FlValueString* v = reinterpret_cast<FlValueString*>(self);
411  g_free(v->value);
412  break;
413  }
415  FlValueUint8List* v = reinterpret_cast<FlValueUint8List*>(self);
416  g_free(v->values);
417  break;
418  }
420  FlValueInt32List* v = reinterpret_cast<FlValueInt32List*>(self);
421  g_free(v->values);
422  break;
423  }
425  FlValueInt64List* v = reinterpret_cast<FlValueInt64List*>(self);
426  g_free(v->values);
427  break;
428  }
430  FlValueFloat32List* v = reinterpret_cast<FlValueFloat32List*>(self);
431  g_free(v->values);
432  break;
433  }
435  FlValueFloatList* v = reinterpret_cast<FlValueFloatList*>(self);
436  g_free(v->values);
437  break;
438  }
439  case FL_VALUE_TYPE_LIST: {
440  FlValueList* v = reinterpret_cast<FlValueList*>(self);
441  g_ptr_array_unref(v->values);
442  break;
443  }
444  case FL_VALUE_TYPE_MAP: {
445  FlValueMap* v = reinterpret_cast<FlValueMap*>(self);
446  g_ptr_array_unref(v->keys);
447  g_ptr_array_unref(v->values);
448  break;
449  }
450  case FL_VALUE_TYPE_CUSTOM: {
451  FlValueCustom* v = reinterpret_cast<FlValueCustom*>(self);
452  if (v->destroy_notify != nullptr) {
453  v->destroy_notify((gpointer)v->value);
454  }
455  break;
456  }
457  case FL_VALUE_TYPE_NULL:
458  case FL_VALUE_TYPE_BOOL:
459  case FL_VALUE_TYPE_INT:
460  case FL_VALUE_TYPE_FLOAT:
461  break;
462  }
463  g_free(self);
464 }

References FlValueCustom::destroy_notify, FL_VALUE_TYPE_BOOL, FL_VALUE_TYPE_CUSTOM, FL_VALUE_TYPE_FLOAT, FL_VALUE_TYPE_FLOAT32_LIST, FL_VALUE_TYPE_FLOAT_LIST, FL_VALUE_TYPE_INT, FL_VALUE_TYPE_INT32_LIST, FL_VALUE_TYPE_INT64_LIST, FL_VALUE_TYPE_LIST, FL_VALUE_TYPE_MAP, FL_VALUE_TYPE_NULL, FL_VALUE_TYPE_STRING, FL_VALUE_TYPE_UINT8_LIST, FlValueMap::keys, FlValueString::value, FlValueCustom::value, FlValueUint8List::values, FlValueInt32List::values, FlValueInt64List::values, FlValueFloat32List::values, FlValueFloatList::values, FlValueList::values, and FlValueMap::values.

Referenced by fl_method_call_dispose(), fl_method_error_response_dispose(), fl_method_success_response_dispose(), fl_value_destroy(), fl_value_lookup_string(), fl_view_accessible_handle_update_semantics(), FlValueHandler::FlValueHandler(), FlValueHandler::Key(), TEST(), and FlValueHandler::~FlValueHandler().

◆ float_to_string()

static void float_to_string ( double  value,
GString *  buffer 
)
static

Definition at line 117 of file fl_value.cc.

117  {
118  g_string_append_printf(buffer, "%.16f", value);
119 
120  // Strip trailing zeros.
121  int zero_count = 0;
122  for (int i = buffer->len - 1; i >= 0; i--) {
123  // Leave one zero after a decimal point.
124  if (buffer->str[i] == '.') {
125  zero_count = zero_count == 0 ? 0 : zero_count - 1;
126  break;
127  }
128  if (buffer->str[i] != '0') {
129  break;
130  }
131  zero_count++;
132  }
133  g_string_truncate(buffer, buffer->len - zero_count);
134 }

References buffer, i, and value.

Referenced by value_to_string().

◆ int_to_string()

static void int_to_string ( int64_t  value,
GString *  buffer 
)
static

Definition at line 112 of file fl_value.cc.

112  {
113  g_string_append_printf(buffer, "%" G_GINT64_FORMAT, value);
114 }

References buffer, and value.

Referenced by value_to_string().

◆ value_to_string()

static void value_to_string ( FlValue value,
GString *  buffer 
)
static

Definition at line 136 of file fl_value.cc.

136  {
137  switch (value->type) {
138  case FL_VALUE_TYPE_NULL:
139  g_string_append(buffer, "null");
140  return;
141  case FL_VALUE_TYPE_BOOL:
142  if (fl_value_get_bool(value)) {
143  g_string_append(buffer, "true");
144  } else {
145  g_string_append(buffer, "false");
146  }
147  return;
148  case FL_VALUE_TYPE_INT:
150  return;
151  case FL_VALUE_TYPE_FLOAT:
153  return;
154  case FL_VALUE_TYPE_STRING: {
155  g_string_append(buffer, fl_value_get_string(value));
156  return;
157  }
159  g_string_append(buffer, "[");
160  const uint8_t* values = fl_value_get_uint8_list(value);
161  for (size_t i = 0; i < fl_value_get_length(value); i++) {
162  if (i != 0) {
163  g_string_append(buffer, ", ");
164  }
165  int_to_string(values[i], buffer);
166  }
167  g_string_append(buffer, "]");
168  return;
169  }
171  g_string_append(buffer, "[");
172  const int32_t* values = fl_value_get_int32_list(value);
173  for (size_t i = 0; i < fl_value_get_length(value); i++) {
174  if (i != 0) {
175  g_string_append(buffer, ", ");
176  }
177  int_to_string(values[i], buffer);
178  }
179  g_string_append(buffer, "]");
180  return;
181  }
183  g_string_append(buffer, "[");
184  const int64_t* values = fl_value_get_int64_list(value);
185  for (size_t i = 0; i < fl_value_get_length(value); i++) {
186  if (i != 0) {
187  g_string_append(buffer, ", ");
188  }
189  int_to_string(values[i], buffer);
190  }
191  g_string_append(buffer, "]");
192  return;
193  }
195  g_string_append(buffer, "[");
196  const float* values = fl_value_get_float32_list(value);
197  for (size_t i = 0; i < fl_value_get_length(value); i++) {
198  if (i != 0) {
199  g_string_append(buffer, ", ");
200  }
201  float_to_string(values[i], buffer);
202  }
203  g_string_append(buffer, "]");
204  return;
205  }
207  g_string_append(buffer, "[");
208  const double* values = fl_value_get_float_list(value);
209  for (size_t i = 0; i < fl_value_get_length(value); i++) {
210  if (i != 0) {
211  g_string_append(buffer, ", ");
212  }
213  float_to_string(values[i], buffer);
214  }
215  g_string_append(buffer, "]");
216  return;
217  }
218  case FL_VALUE_TYPE_LIST: {
219  g_string_append(buffer, "[");
220  for (size_t i = 0; i < fl_value_get_length(value); i++) {
221  if (i != 0) {
222  g_string_append(buffer, ", ");
223  }
225  }
226  g_string_append(buffer, "]");
227  return;
228  }
229  case FL_VALUE_TYPE_MAP: {
230  g_string_append(buffer, "{");
231  for (size_t i = 0; i < fl_value_get_length(value); i++) {
232  if (i != 0) {
233  g_string_append(buffer, ", ");
234  }
236  g_string_append(buffer, ": ");
238  }
239  g_string_append(buffer, "}");
240  return;
241  }
243  g_string_append_printf(buffer, "(custom %d)",
245  return;
246  default:
247  g_string_append_printf(buffer, "<unknown type %d>", value->type);
248  }
249 }

References buffer, fl_value_get_bool(), fl_value_get_custom_type(), fl_value_get_float(), fl_value_get_float32_list(), fl_value_get_float_list(), fl_value_get_int(), fl_value_get_int32_list(), fl_value_get_int64_list(), fl_value_get_length(), fl_value_get_list_value(), fl_value_get_map_key(), fl_value_get_map_value(), fl_value_get_string(), fl_value_get_uint8_list(), FL_VALUE_TYPE_BOOL, FL_VALUE_TYPE_CUSTOM, FL_VALUE_TYPE_FLOAT, FL_VALUE_TYPE_FLOAT32_LIST, FL_VALUE_TYPE_FLOAT_LIST, FL_VALUE_TYPE_INT, FL_VALUE_TYPE_INT32_LIST, FL_VALUE_TYPE_INT64_LIST, FL_VALUE_TYPE_LIST, FL_VALUE_TYPE_MAP, FL_VALUE_TYPE_NULL, FL_VALUE_TYPE_STRING, FL_VALUE_TYPE_UINT8_LIST, float_to_string(), i, int_to_string(), and value.

Referenced by fl_value_to_string().

FlValueFloatList::values_length
size_t values_length
Definition: fl_value.cc:63
fl_value_get_int32_list
const G_MODULE_EXPORT int32_t * fl_value_get_int32_list(FlValue *self)
Definition: fl_value.cc:696
FL_VALUE_TYPE_UINT8_LIST
@ FL_VALUE_TYPE_UINT8_LIST
Definition: fl_value.h:70
FL_VALUE_TYPE_MAP
@ FL_VALUE_TYPE_MAP
Definition: fl_value.h:75
int_to_string
static void int_to_string(int64_t value, GString *buffer)
Definition: fl_value.cc:112
fl_value_new
static FlValue * fl_value_new(FlValueType type, size_t size)
Definition: fl_value.cc:84
type
uint8_t type
Definition: fl_standard_message_codec_test.cc:1115
FlValueInt::value
int64_t value
Definition: fl_value.cc:23
fl_value_destroy
static void fl_value_destroy(gpointer value)
Definition: fl_value.cc:92
FlValueUint8List::values
uint8_t * values
Definition: fl_value.cc:38
fl_value_new_list
G_MODULE_EXPORT FlValue * fl_value_new_list()
Definition: fl_value.cc:349
FlValueFloat32List::values_length
size_t values_length
Definition: fl_value.cc:57
FlValueList
Definition: fl_value.cc:66
i
int i
Definition: fl_socket_accessible.cc:18
fl_value_get_float_list
const G_MODULE_EXPORT double * fl_value_get_float_list(FlValue *self)
Definition: fl_value.cc:717
FlValue
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:42
fl_value_set_take
G_MODULE_EXPORT void fl_value_set_take(FlValue *self, FlValue *key, FlValue *value)
Definition: fl_value.cc:618
FlValueInt
Definition: fl_value.cc:21
fl_value_new_custom
G_MODULE_EXPORT FlValue * fl_value_new_custom(int type, gconstpointer value, GDestroyNotify destroy_notify)
Definition: fl_value.cc:374
FL_VALUE_TYPE_LIST
@ FL_VALUE_TYPE_LIST
Definition: fl_value.h:74
fl_value_get_bool
G_MODULE_EXPORT bool fl_value_get_bool(FlValue *self)
Definition: fl_value.cc:661
fl_value_get_uint8_list
const G_MODULE_EXPORT uint8_t * fl_value_get_uint8_list(FlValue *self)
Definition: fl_value.cc:689
FlValueCustom::destroy_notify
GDestroyNotify destroy_notify
Definition: fl_value.cc:81
fl_value_get_string
const G_MODULE_EXPORT gchar * fl_value_get_string(FlValue *self)
Definition: fl_value.cc:682
FlValueCustom::value
gconstpointer value
Definition: fl_value.cc:80
FlValueFloatList
Definition: fl_value.cc:60
FlValueCustom
Definition: fl_value.cc:77
fl_value_get_float32_list
const G_MODULE_EXPORT float * fl_value_get_float32_list(FlValue *self)
Definition: fl_value.cc:710
FL_VALUE_TYPE_NULL
@ FL_VALUE_TYPE_NULL
Definition: fl_value.h:65
value_to_string
static void value_to_string(FlValue *value, GString *buffer)
Definition: fl_value.cc:136
FlValueBool
Definition: fl_value.cc:16
FlValueInt32List
Definition: fl_value.cc:42
fl_value_get_int
G_MODULE_EXPORT int64_t fl_value_get_int(FlValue *self)
Definition: fl_value.cc:668
fl_value_unref
G_MODULE_EXPORT void fl_value_unref(FlValue *self)
Definition: fl_value.cc:400
FlValueMap
Definition: fl_value.cc:71
FlValueFloat32List::values
float * values
Definition: fl_value.cc:56
fl_value_ref
G_MODULE_EXPORT FlValue * fl_value_ref(FlValue *self)
Definition: fl_value.cc:394
FlValueInt32List::values
int32_t * values
Definition: fl_value.cc:44
FL_VALUE_TYPE_CUSTOM
@ FL_VALUE_TYPE_CUSTOM
Definition: fl_value.h:77
FlValueFloatList::values
double * values
Definition: fl_value.cc:62
FlValueString::value
gchar * value
Definition: fl_value.cc:33
FlValueInt64List::values
int64_t * values
Definition: fl_value.cc:50
fl_value_get_list_value
G_MODULE_EXPORT FlValue * fl_value_get_list_value(FlValue *self, size_t index)
Definition: fl_value.cc:776
FL_VALUE_TYPE_FLOAT32_LIST
@ FL_VALUE_TYPE_FLOAT32_LIST
Definition: fl_value.h:76
FL_VALUE_TYPE_STRING
@ FL_VALUE_TYPE_STRING
Definition: fl_value.h:69
FlValueBool::value
bool value
Definition: fl_value.cc:18
FlValueCustom::type
int type
Definition: fl_value.cc:79
float_to_string
static void float_to_string(double value, GString *buffer)
Definition: fl_value.cc:117
fl_value_get_float
G_MODULE_EXPORT double fl_value_get_float(FlValue *self)
Definition: fl_value.cc:675
fl_value_append_take
G_MODULE_EXPORT void fl_value_append_take(FlValue *self, FlValue *value)
Definition: fl_value.cc:600
fl_value_get_length
G_MODULE_EXPORT size_t fl_value_get_length(FlValue *self)
Definition: fl_value.cc:724
FL_VALUE_TYPE_INT64_LIST
@ FL_VALUE_TYPE_INT64_LIST
Definition: fl_value.h:72
fl_value_equal
G_MODULE_EXPORT bool fl_value_equal(FlValue *a, FlValue *b)
Definition: fl_value.cc:471
FL_VALUE_TYPE_INT
@ FL_VALUE_TYPE_INT
Definition: fl_value.h:67
FlValueList::values
GPtrArray * values
Definition: fl_value.cc:68
FlValueMap::values
GPtrArray * values
Definition: fl_value.cc:74
FlValueInt32List::values_length
size_t values_length
Definition: fl_value.cc:45
FlValueString
Definition: fl_value.cc:31
FlValueMap::keys
GPtrArray * keys
Definition: fl_value.cc:73
FlValueDouble::value
double value
Definition: fl_value.cc:28
fl_value_get_custom_type
G_MODULE_EXPORT int fl_value_get_custom_type(FlValue *self)
Definition: fl_value.cc:822
FL_VALUE_TYPE_FLOAT_LIST
@ FL_VALUE_TYPE_FLOAT_LIST
Definition: fl_value.h:73
FlValueInt64List
Definition: fl_value.cc:48
FlValueFloat32List
Definition: fl_value.cc:54
fl_value_new_uint8_list
G_MODULE_EXPORT FlValue * fl_value_new_uint8_list(const uint8_t *data, size_t data_length)
Definition: fl_value.cc:292
buffer
static const uint8_t buffer[]
Definition: fl_pixel_buffer_texture_test.cc:44
FL_VALUE_TYPE_FLOAT
@ FL_VALUE_TYPE_FLOAT
Definition: fl_value.h:68
FlValueDouble
Definition: fl_value.cc:26
FL_VALUE_TYPE_INT32_LIST
@ FL_VALUE_TYPE_INT32_LIST
Definition: fl_value.h:71
FlValueInt64List::values_length
size_t values_length
Definition: fl_value.cc:51
FlValueUint8List::values_length
size_t values_length
Definition: fl_value.cc:39
fl_value_lookup_index
static ssize_t fl_value_lookup_index(FlValue *self, FlValue *key)
Definition: fl_value.cc:99
FlValueUint8List
Definition: fl_value.cc:36
fl_value_lookup
G_MODULE_EXPORT FlValue * fl_value_lookup(FlValue *self, FlValue *key)
Definition: fl_value.cc:800
fl_value_get_map_key
G_MODULE_EXPORT FlValue * fl_value_get_map_key(FlValue *self, size_t index)
Definition: fl_value.cc:784
fl_value_get_int64_list
const G_MODULE_EXPORT int64_t * fl_value_get_int64_list(FlValue *self)
Definition: fl_value.cc:703
FL_VALUE_TYPE_BOOL
@ FL_VALUE_TYPE_BOOL
Definition: fl_value.h:66
value
uint8_t value
Definition: fl_standard_message_codec.cc:36
length
size_t length
Definition: fl_standard_message_codec_test.cc:1113
fl_value_get_map_value
G_MODULE_EXPORT FlValue * fl_value_get_map_value(FlValue *self, size_t index)
Definition: fl_value.cc:792
fl_value_new_string
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
Definition: fl_value.cc:276