Adaptive Framework  0.9.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
afw_object.h
Go to the documentation of this file.
1 // See the 'COPYING' file in the project root for licensing information.
2 /*
3  * Adaptive Framework interface helpers for afw_object* header
4  *
5  * Copyright (c) 2010-2023 Clemson University
6  *
7  */
8 
9 #ifndef __AFW_OBJECT_H
10 #define __AFW_OBJECT_H
11 
12 #include "afw_interface.h"
13 
28 
30 #define AFW_OBJECT_Q_CORE_ID_PREFIX AFW_Q__Adaptive
31 
33 #define AFW_OBJECT_S_CORE_ID_PREFIX afw_s__Adaptive
34 
36 #define AFW_OBJECT_Q_OBJECT_TYPE_ID_OBJECT AFW_Q__AdaptiveObject_
37 
39 #define AFW_OBJECT_S_OBJECT_TYPE_ID_OBJECT afw_s__AdaptiveObject_
40 
42 #define AFW_OBJECT_Q_OBJECT_TYPE_ID_OBJECT_TYPE AFW_Q__AdaptiveObjectType_
43 
45 #define AFW_OBJECT_S_OBJECT_TYPE_ID_OBJECT_TYPE afw_s__AdaptiveObjectType_
46 
48 #define AFW_OBJECT_Q_OBJECT_TYPE_ID_VALUE_META AFW_Q__AdaptiveValueMeta_
49 
51 #define AFW_OBJECT_S_OBJECT_TYPE_ID_VALUE_META afw_s__AdaptiveValueMeta_
52 
54 #define AFW_OBJECT_Q_OBJECT_TYPE_ID_DATA_TYPE AFW_Q__AdaptiveDataType_
55 
57 #define AFW_OBJECT_S_OBJECT_TYPE_ID_DATA_TYPE afw_s__AdaptiveDataType_
58 
60 #define AFW_OBJECT_Q_OBJECT_TYPE_ID_JOURNAL_ENTRY AFW_Q__AdaptiveJournalEntry_
61 
63 #define AFW_OBJECT_S_OBJECT_TYPE_ID_JOURNAL_ENTRY afw_s__AdaptiveJournalEntry_
64 
66 #define AFW_OBJECT_Q_OBJECT_TYPE_ID_PROVISIONING_PEER AFW_Q__AdaptiveProvisioningPeer_
67 
69 #define AFW_OBJECT_S_OBJECT_TYPE_ID_PROVISIONING_PEER afw_s__AdaptiveProvisioningPeer_
70 
72 #define AFW_OBJECT_Q_OBJECT_TYPE_ID_RESPONSE AFW_Q__AdaptiveResponse_
73 
75 #define AFW_OBJECT_S_OBJECT_TYPE_ID_RESPONSE afw_s__AdaptiveResponse_
76 
78 #define AFW_OBJECT_Q_PN_META AFW_Q__meta_
79 
81 #define AFW_OBJECT_S_PN_META afw_s__meta_
82 
84 #define AFW_OBJECT_Q_PN_OBJECT_ID AFW_Q_objectId
85 
87 #define AFW_OBJECT_S_PN_OBJECT_ID afw_s_objectId
88 
90 #define AFW_OBJECT_Q_PN_PATH AFW_Q_path
91 
93 #define AFW_OBJECT_S_PN_PATH afw_s_path
94 
96 #define AFW_OBJECT_Q_PN_ADAPTOR_ID AFW_Q_adaptorId
97 
99 #define AFW_OBJECT_S_PN_ADAPTOR_ID afw_s_adaptorId
100 
102 #define AFW_OBJECT_Q_PN_OBJECT_TYPE AFW_Q_objectType
103 
105 #define AFW_OBJECT_S_PN_OBJECT_TYPE afw_s_objectType
106 
108 #define AFW_OBJECT_Q_PN_PARENT_PATHS AFW_Q_parentPaths
109 
111 #define AFW_OBJECT_S_PN_PARENT_PATHS afw_s_parentPaths
112 
114 #define AFW_OBJECT_Q_PN_PROPERTY_TYPES AFW_Q_propertyTypes
115 
117 #define AFW_OBJECT_S_PN_PROPERTY_TYPES afw_s_propertyTypes
118 
120 #define AFW_OBJECT_Q_PN_META_OBJECTTYPE \
121  AFW_OBJECT_Q_PN_META "." AFW_OBJECT_Q_PN_OBJECT_TYPE
122 
124 #define AFW_OBJECT_S_PN_META_OBJECTTYPE afw_s_a_meta_objectType
125 
127 #define AFW_OBJECT_ID_IS_OBJECT_TYPE(OBJECT_TYPE_ID) \
128  afw_utf8_equal((OBJECT_TYPE_ID), &afw_s__AdaptiveObjectType_)
129 
131 #define AFW_OBJECT_IS_CORE_OBJECT_TYPE_ID(OBJECT_TYPE_ID, OBJECT_ID) \
132  AFW_OBJECT_ID_IS_OBJECT_TYPE(OBJECT_TYPE_ID) && \
133  afw_utf8_starts_with((OBJECT_ID), &afw_s__Adaptive)
134 
136 #define AFW_OBJECT_IS_CORE_TYPE_ID(ID) \
137  afw_utf8_starts_with((ID), &afw_s__Adaptive)
138 
139 
148  const afw_object_t *object,
149  afw_xctx_t *xctx);
150 
151 
158 #define afw_object_is_immutable(instance, xctx) \
159 (afw_object_get_setter(instance, xctx) == NULL)
160 
161 
162 
163 #define AFW_OBJECT_IMPL_ERROR_OBJECT_NOT_ENTITY \
164 AFW_THROW_ERROR_Z(general, "Object is not an entity", xctx)
165 
166 
172 #define AFW_OBJECT_ASSERT_ENTITY(instance, xctx) \
173 do { \
174  if (instance->meta.embedding_object) \
175  AFW_OBJECT_IMPL_ERROR_OBJECT_NOT_ENTITY; \
176  } \
177 while (0)
178 
179 
180 #define AFW_OBJECT_ERROR_OBJECT_IMMUTABLE \
181 AFW_THROW_ERROR_Z(read_only, "Object immutable", xctx)
182 
183 
189 #define AFW_OBJECT_ASSERT_MUTABLE(instance, xctx) \
190 do { \
191  if (afw_object_is_immutable(instance, xctx)) \
192  AFW_OBJECT_ERROR_OBJECT_IMMUTABLE; \
193  } \
194 while (0)
195 
196 
197 #define AFW_OBJECT_ERROR_PROPERTY_IMMUTABLE(property_name) \
198 AFW_THROW_ERROR_FZ(read_only, xctx, \
199  "Object property %" AFW_UTF8_FMT " is immutable", \
200  AFW_UTF8_FMT_ARG(property_name))
201 
207 AFW_DECLARE(void)
208 afw_object_set_immutable(const afw_object_t *instance, afw_xctx_t *xctx);
209 
210 
222 AFW_DECLARE(void)
224  const afw_object_t *instance,
225  const afw_utf8_t *property_name,
226  afw_xctx_t *xctx);
227 
228 
249 AFW_DECLARE(void)
251  const afw_object_t *instance,
252  const afw_utf8_t *property_name,
253  const afw_value_t *value,
254  afw_xctx_t *xctx);
255 
256 
257 
270 AFW_DECLARE(void)
272  const afw_object_t *instance,
273  const afw_utf8_t *property_name,
274  int year,
275  int month,
276  int day,
277  int tz_hours_offset,
278  int tz_minutes_offset,
279  afw_xctx_t *xctx);
280 
281 
282 
299 AFW_DECLARE(void)
301  const afw_object_t *instance,
302  const afw_utf8_t *property_name,
303  int year,
304  int month,
305  int day,
306  int hour,
307  int minute,
308  int second,
309  int microsecond,
310  int tz_hours_offset,
311  int tz_minutes_offset,
312  afw_xctx_t *xctx);
313 
314 
327 AFW_DECLARE(void)
329  const afw_object_t *instance,
330  const afw_utf8_t *property_name,
331  afw_boolean_t is_positive,
332  int days,
333  int hours,
334  int minutes,
335  int seconds,
336  int microseconds,
337  afw_xctx_t *xctx);
338 
339 
340 
354 AFW_DECLARE(void)
356  const afw_object_t *instance,
357  const afw_utf8_t *property_name,
358  int hour,
359  int minute,
360  int second,
361  int microsecond,
362  int tz_hours_offset,
363  int tz_minutes_offset,
364  afw_xctx_t *xctx);
365 
366 
376 AFW_DECLARE(void)
378  const afw_object_t *instance,
379  const afw_utf8_t *property_name,
380  afw_boolean_t is_positive,
381  int years,
382  int months,
383  afw_xctx_t *xctx);
384 
385 
393 AFW_DECLARE(void)
395  const afw_object_t *instance,
396  const afw_utf8_t *property_name,
397  const afw_utf8_z_t *string_z,
398  afw_xctx_t *xctx);
399 
400 
406 #define AFW_OBJECT_GET_ENTITY(entity,object) \
407  entity = object; \
408  while (entity->meta.embedding_object) \
409  entity = entity->meta.embedding_object
410 
411 
417 AFW_DEFINE_STATIC_INLINE(void)
419  const afw_utf8_t *path)
420 {
421  const afw_utf8_octet_t *s;
422 
423  entity_path->s = path->s;
424  entity_path->len = path->len;
425  for (s = path->s + path->len - 1;
426  s > path->s && *s != '/';
427  s--)
428  {
429  if (*s == '.') {
430  entity_path->len = s - path->s;
431  }
432  }
433 }
434 
435 
442 AFW_DEFINE_STATIC_INLINE(const afw_object_t *)
444 {
445  const afw_object_t *entity;
446  AFW_OBJECT_GET_ENTITY(entity, object);
447  return entity;
448 }
449 
450 
451 
463 AFW_DEFINE_STATIC_INLINE(const afw_object_t *)
465  const afw_object_t *object,
466  const afw_utf8_t *path,
467  afw_xctx_t *xctx)
468 {
469  if (object) return object;
470  if (!path) return NULL;
471  /* Will not happen if objects retrieved using afw_cache_* */
472  AFW_THROW_ERROR_FZ(objects_needed, xctx, "%" AFW_UTF8_FMT,
473  AFW_UTF8_FMT_ARG(path));
474 };
475 
476 
477 
491 AFW_DECLARE(const afw_value_t *)
493  const afw_object_t *instance,
494  const afw_utf8_t *property_name,
495  const afw_utf8_t *source_location,
496  afw_compile_type_t compile_type,
497  const afw_pool_t *p,
498  afw_xctx_t *xctx);
499 
500 
501 
515 AFW_DECLARE(const afw_value_t *)
517  const afw_object_t *instance,
518  const afw_utf8_t *property_name,
519  const afw_utf8_t *source_location,
520  afw_compile_type_t compile_type,
521  const afw_pool_t *p,
522  afw_xctx_t *xctx);
523 
524 
525 
544 AFW_DECLARE(const afw_value_t *)
546  const afw_object_t *instance,
547  const afw_utf8_t *property_name,
548  afw_xctx_t *xctx);
549 
550 
560 AFW_DECLARE(const afw_value_t * const *)
562  const afw_object_t *instance,
563  const afw_utf8_t *property_name,
564  const afw_pool_t *p, afw_xctx_t *xctx);
565 
566 
567 
579 AFW_DECLARE(const afw_utf8_t * const *)
581  const afw_object_t *instance, const afw_utf8_t *property_name,
582  const afw_pool_t *p, afw_xctx_t *xctx);
583 
584 
585 
600 AFW_DECLARE(const afw_value_t *)
602  const afw_object_t *instance,
603  const afw_utf8_t *property_name,
604  const afw_utf8_t *source_location,
605  const afw_compile_shared_t *shared,
606  const afw_pool_t *p, afw_xctx_t *xctx);
607 
608 
609 
622  const afw_object_t *instance,
623  const afw_utf8_t *property_name,
624  afw_xctx_t *xctx);
625 
626 
641  const afw_object_t *instance,
642  const afw_utf8_t *property_name,
643  afw_boolean_t *found,
644  afw_xctx_t *xctx);
645 
646 
655 AFW_DECLARE(const afw_utf8_t *)
657  const afw_object_t *instance,
658  const afw_utf8_t *property_name,
659  const afw_pool_t *p,
660  afw_xctx_t *xctx);
661 
662 
663 
675 AFW_DECLARE(const afw_utf8_z_t *)
677  const afw_object_t *instance,
678  const afw_utf8_t *property_name,
679  const afw_pool_t *p,
680  afw_xctx_t *xctx);
681 
682 
683 
693 AFW_DECLARE(void)
695  const afw_object_t *instance,
696  const afw_object_t *from,
697  afw_boolean_t replace,
698  afw_xctx_t *xctx);
699 
700 
701 
710  const afw_pool_t *p, afw_xctx_t *xctx);
711 
712 
720 #define AFW_OBJECT_MEMORY_OPTION_default 0
721 
722 
733 #define AFW_OBJECT_MEMORY_OPTION_unmanaged (1 << 0)
734 
735 
743 #define AFW_OBJECT_MEMORY_OPTION_cede_p (1 << 1)
744 
745 
753 #define AFW_OBJECT_MEMORY_OPTION_clone_on_set (1 << 2)
754 
755 
763 #define AFW_OBJECT_MEMORY_OPTION_cede_p_and_clone_on_set \
764  AFW_OBJECT_MEMORY_OPTION_cede_p + \
765  AFW_OBJECT_MEMORY_OPTION_clone_on_set
766 
767 
769 #define AFW_OBJECT_MEMORY_OPTION_IS(options_mask, option) \
770  ((((options_mask) & (AFW_OBJECT_MEMORY_OPTION_ ## option))) != 0)
771 
772 
781 AFW_DECLARE(const afw_object_t *)
783  int options, const afw_pool_t * p, afw_xctx_t *xctx);
784 
785 
795 AFW_DECLARE(const afw_object_t *)
797  afw_boolean_t mutable,
798  const afw_pool_t *p, afw_xctx_t *xctx,
799  ...);
800 
801 
802 
810 typedef const afw_value_t *(*afw_object_properties_callback_entry_get_t) (
811  void *data,
812  const afw_utf8_t *property_name,
813  afw_xctx_t *xctx);
814 
815 
816 
825  void *data,
826  const afw_utf8_t *property_name,
827  const afw_value_t *value,
828  afw_xctx_t *xctx);
829 
830 
831 
840  const afw_utf8_t *property_name;
843 };
844 
845 
846 
857 AFW_DECLARE(const afw_object_t *)
859  void *data,
860  afw_size_t count,
861  const afw_object_properties_callback_entry_t callbacks[],
862  const afw_pool_t *p, afw_xctx_t *xctx);
863 
864 
865 
898 #define afw_object_create_and_cede_p(p, xctx) \
899  afw_object_create_with_options( \
900  AFW_OBJECT_MEMORY_OPTION_cede_p, p, xctx)
901 
902 
913 #define afw_object_create_managed(p, xctx) \
914  afw_object_create_with_options( \
915  AFW_OBJECT_MEMORY_OPTION_default, p, xctx)
916 
917 
934 #define afw_object_create_clone_on_set(p, xctx) \
935  afw_object_create_with_options( \
936  AFW_OBJECT_MEMORY_OPTION_clone_on_set, p, xctx)
937 
938 
948 #define afw_object_create(p, xctx) \
949  afw_object_create_with_options( \
950  AFW_OBJECT_MEMORY_OPTION_unmanaged, p, xctx)
951 
952 
964 AFW_DECLARE(const afw_object_t *)
966  const afw_object_t *embedding_object,
967  const afw_utf8_t *property_name,
968  afw_xctx_t *xctx);
969 
970 
971 
983 AFW_DECLARE(const afw_object_t *)
985  const afw_object_t *embedding_object,
986  const afw_utf8_t *property_name,
987  afw_xctx_t *xctx);
988 
989 
990 
991 
1015 #define AFW_OBJECT_CREATE_ENTITY_OR_EMBEDDED( \
1016  result,embedding_object,property_name,always_create_unmanaged, \
1017  cede_p,entity_p,xctx) \
1018  if (always_create_unmanaged || \
1019  (property_name && afw_utf8_equal(property_name, &afw_s__meta_))) \
1020  { \
1021  result = afw_object_create(entity_p, xctx); \
1022  } \
1023  else if (embedding_object) { \
1024  result = afw_object_create_embedded( \
1025  embedding_object, property_name, xctx); \
1026  } \
1027  else { \
1028  result = afw_object_create_with_options( \
1029  (cede_p) \
1030  ? AFW_OBJECT_MEMORY_OPTION_cede_p \
1031  : AFW_OBJECT_MEMORY_OPTION_default, \
1032  entity_p, xctx); \
1033  } \
1034 
1035 
1036 
1044 AFW_DECLARE(const afw_object_t *)
1046  const afw_object_t *object,
1047  const afw_pool_t *p,
1048  afw_xctx_t *xctx);
1049 
1050 
1051 
1052 
1063 #define afw_object_create_clone_to_managed_object( \
1064  object, p, xctx) \
1065  afw_data_type_object_create_clone_to_managed_object( \
1066  object, p, xctx)
1067 
1068 
1069 
1078 AFW_DECLARE(const afw_object_t *)
1080  const afw_object_t *primary,
1081  const afw_object_t *secondary,
1082  const afw_pool_t *p,
1083  afw_xctx_t *xctx);
1084 
1085 
1086 
1087 
1119 AFW_DECLARE(const afw_object_t *)
1121  const afw_object_t * const *object_list,
1122  const afw_pool_t *p,
1123  afw_xctx_t *xctx);
1124 
1125 
1126 
1135 AFW_DECLARE(const afw_object_t *)
1137  const afw_utf8_t *path,
1138  const afw_utf8_z_t * const *pairs,
1139  const afw_pool_t *p,
1140  afw_xctx_t *xctx);
1141 
1142 AFW_END_DECLARES
1143 
1146 #endif /* __AFW_OBJECT_H */
#define AFW_BEGIN_DECLARES
#define AFW_DECLARE(type)
Declare a public afw function.
Interfaceafw_interface header.
#define AFW_UTF8_FMT_ARG(A_STRING)
Convenience Macro for use with AFW_UTF8_FMT to specify arg.
Definition: afw_common.h:605
_Bool afw_boolean_t
Definition: afw_common.h:373
#define AFW_UTF8_FMT
Format string specifier used for afw_utf8_t.
Definition: afw_common.h:588
afw_utf8_octet_t afw_utf8_z_t
NFC normalized UTF-8 null terminated string.
Definition: afw_common.h:523
enum afw_compile_type_e afw_compile_type_t
Compile type enum.
char afw_utf8_octet_t
8 bits of utf-8 codepoint.
Definition: afw_common.h:236
apr_size_t afw_size_t
size_t.
Definition: afw_common.h:151
apr_int64_t afw_integer_t
typedef for big signed int.
Definition: afw_common.h:321
#define AFW_THROW_ERROR_FZ(code, xctx, format_z,...)
Macro used to set error and 0 rv in xctx and throw it.
Definition: afw_error.h:319
void afw_object_set_property_as_date_from_parts(const afw_object_t *instance, const afw_utf8_t *property_name, int year, int month, int day, int tz_hours_offset, int tz_minutes_offset, afw_xctx_t *xctx)
Set a date property from parts.
Definition: afw_object.c:66
void afw_object_remove_property(const afw_object_t *instance, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Remove a property from object.
Definition: afw_object.c:35
const afw_utf8_z_t * afw_object_old_get_property_as_utf8_z(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
Get an object's property value including ancestors as utf8_z in specified pool.
Definition: afw_object.c:555
const afw_value_t *(* afw_object_properties_callback_entry_get_t)(void *data, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Typedef for an object property get callback.
Definition: afw_object.h:810
#define AFW_OBJECT_GET_ENTITY(entity, object)
Macro to get entity for object.
Definition: afw_object.h:406
void afw_object_parse_entity_path_from_path(afw_utf8_t *entity_path, const afw_utf8_t *path)
Parse entity path from path.
Definition: afw_object.h:418
void afw_object_set_property_as_dayTimeDuration_from_parts(const afw_object_t *instance, const afw_utf8_t *property_name, afw_boolean_t is_positive, int days, int hours, int minutes, int seconds, int microseconds, afw_xctx_t *xctx)
Set a dayTimeDuration property from parts.
Definition: afw_object.c:121
const afw_value_t * afw_object_get_property_extended(const afw_object_t *instance, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Get the value of an object's own property or embedded property.
Definition: afw_object.c:274
const afw_object_t * afw_object_insure_embedded_exists(const afw_object_t *embedding_object, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Insure embedded object exists creating if necessary.
const afw_object_t * afw_object_create_clone(const afw_object_t *object, const afw_pool_t *p, afw_xctx_t *xctx)
Clone an object to a specified pool.
Definition: afw_memory.c:138
const afw_utf8_t * afw_object_old_get_property_as_utf8(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
Get an object's property value as a string in specified pool.
Definition: afw_object.c:531
const afw_object_t * afw_object_create_with_options(int options, const afw_pool_t *p, afw_xctx_t *xctx)
Create an empty entity object with options.
afw_integer_t afw_object_old_get_property_as_integer_deprecated(const afw_object_t *instance, const afw_utf8_t *property_name, afw_boolean_t *found, afw_xctx_t *xctx)
Get an object's property value as an integer.
Definition: afw_object.c:495
const afw_object_t * afw_object_resolve_instance(const afw_object_t *object, const afw_utf8_t *path, afw_xctx_t *xctx)
Resolve an object's instance pointer.
Definition: afw_object.h:464
void afw_object_merge(const afw_object_t *instance, const afw_object_t *from, afw_boolean_t replace, afw_xctx_t *xctx)
Merge properties from one object into another.
Definition: afw_object.c:576
const afw_object_associative_array_t * afw_object_memory_associative_array_create(const afw_pool_t *p, afw_xctx_t *xctx)
Create memory object associative array.
const afw_object_t * afw_object_get_entity(const afw_object_t *object, afw_xctx_t *xctx)
Get entity for object.
Definition: afw_object.h:443
void afw_object_set_property_as_dateTime_from_parts(const afw_object_t *instance, const afw_utf8_t *property_name, int year, int month, int day, int hour, int minute, int second, int microsecond, int tz_hours_offset, int tz_minutes_offset, afw_xctx_t *xctx)
Set a dateTime property from parts.
Definition: afw_object.c:91
const afw_object_t * afw_object_aggregate_external_create(const afw_object_t *const *object_list, const afw_pool_t *p, afw_xctx_t *xctx)
Create an aggregate object with an external object list.
const afw_object_t * afw_object_create_merged(const afw_object_t *primary, const afw_object_t *secondary, const afw_pool_t *p, afw_xctx_t *xctx)
Create a memory object with properties from two other objects.
const afw_utf8_t *const * afw_object_old_get_property_as_array_of_strings(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
Return a NULL terminated list of strings for an object property in a specified pool.
Definition: afw_object.c:387
void afw_object_set_property_as_time_from_parts(const afw_object_t *instance, const afw_utf8_t *property_name, int hour, int minute, int second, int microsecond, int tz_hours_offset, int tz_minutes_offset, afw_xctx_t *xctx)
Set a time property from parts.
Definition: afw_object.c:146
const afw_object_t * afw_object_create_const_from_key_value_strings_z(const afw_utf8_t *path, const afw_utf8_z_t *const *pairs, const afw_pool_t *p, afw_xctx_t *xctx)
Create a const object from key/value utf-8 null terminated strings.
const afw_value_t *const * afw_object_old_get_property_as_array_of_values(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
Return a NULL terminated list of values for an object property in a specified pool.
Definition: afw_object.c:369
void(* afw_object_properties_callback_entry_set_t)(void *data, const afw_utf8_t *property_name, const afw_value_t *value, afw_xctx_t *xctx)
Typedef for an object property set callback.
Definition: afw_object.h:824
const afw_value_t * afw_object_get_property_compile_as(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_utf8_t *source_location, afw_compile_type_t compile_type, const afw_pool_t *p, afw_xctx_t *xctx)
Compile a property value using specified compile type.
Definition: afw_object.c:215
afw_boolean_t afw_object_old_get_property_as_boolean_deprecated(const afw_object_t *instance, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Get an object's property value as a boolean.
Definition: afw_object.c:436
void afw_object_set_property_as_yearMonthDuration_from_parts(const afw_object_t *instance, const afw_utf8_t *property_name, afw_boolean_t is_positive, int years, int months, afw_xctx_t *xctx)
Set a yearMonthDuration property from parts.
Definition: afw_object.c:172
void afw_object_set_property_as_string_from_utf8_z(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_utf8_z_t *string_z, afw_xctx_t *xctx)
Set an string property from utf8_z.
Definition: afw_object.c:194
const afw_value_t * afw_object_old_get_property_as_compiled_hybrid(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_utf8_t *source_location, const afw_compile_shared_t *shared, const afw_pool_t *p, afw_xctx_t *xctx)
Return a compiled hybrid property value.
Definition: afw_object.c:402
void afw_object_set_property(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_value_t *value, afw_xctx_t *xctx)
Set the value of an object's property.
Definition: afw_object.c:46
afw_size_t afw_object_property_count(const afw_object_t *object, afw_xctx_t *xctx)
Count the number of properties in an object.
Definition: afw_object.c:624
const afw_value_t * afw_object_get_property_compile_and_evaluate_as(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_utf8_t *source_location, afw_compile_type_t compile_type, const afw_pool_t *p, afw_xctx_t *xctx)
Compile and evaluate a property value using specified compile type.
Definition: afw_object.c:252
const afw_object_t * afw_object_create_properties_callback(void *data, afw_size_t count, const afw_object_properties_callback_entry_t callbacks[], const afw_pool_t *p, afw_xctx_t *xctx)
Create a mutable composite of unmutable objects.
void afw_object_set_immutable(const afw_object_t *instance, afw_xctx_t *xctx)
Set an object to immutable if it is not already.
Definition: afw_object.c:19
const afw_object_t * afw_object_create_composite(afw_boolean_t mutable, const afw_pool_t *p, afw_xctx_t *xctx,...)
Create a composite of immutable objects.
const afw_object_t * afw_object_create_embedded(const afw_object_t *embedding_object, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Create an empty embedded object in a memory object.
Resources that can be shared by multiple compiles.
Interface afw_object_associative_array public struct.
Struct for afw_object_properties_callback_entry_t.
Definition: afw_object.h:839
Interface afw_object public struct.
Interface afw_pool public struct.
NFC normalized UTF-8 string.
Definition: afw_common.h:545
Interface afw_value public struct.
Interface afw_xctx public struct.