19 #define AFW_IMPLEMENTATION_ID "afw_runtime"
50 else if ((entry)->cb_entry.always_NULL == NULL) {
51 result = entry->cb_entry.cb(entry->cb_entry.data, xctx->p, xctx);
64 apr_hash_t *ht,
const void *key, apr_ssize_t klen,
70 entry = apr_hash_get(ht, key, klen);
72 result = impl_entry_to_object(entry, xctx);
79 impl_runtime_meta_const_embedded_untyped_object = {
86 AFW_RUNTIME_OBJECT_INF(
87 afw_runtime_inf_const_embedded_untyped_object,
88 impl_runtime_meta_const_embedded_untyped_object);
112 impl_resolve_untyped_object(
126 impl_resolve_property(
133 impl_resolve_properties(
140 static const afw_utf8_t impl_factory_description =
146 &impl_afw_adaptor_factory_inf,
148 &impl_factory_description
168 for (env_xctx = xctx; env_xctx->parent; env_xctx = env_xctx->parent);
173 if (!runtime_objects) {
175 env_xctx->runtime_objects = runtime_objects;
178 if (!runtime_objects->types_ht) {
183 ht = apr_hash_get(runtime_objects->types_ht,
184 object_type_id->s, object_type_id->len);
189 apr_hash_set(runtime_objects->types_ht,
190 object_type_id->s, object_type_id->len, ht);
194 test_ht = apr_hash_get(ht, object_id->s, object_id->len);
197 "Runtime object /afw/%"
203 apr_hash_set(ht, object_id->s, object_id->len, entry);
219 impl_set_entry(object_type_id, object_id,
232 for (; *objects; objects++) {
252 entry->cb = callback;
255 impl_set_entry(object_type_id, object_id,
272 for (c = xctx; c; c = c->parent) {
273 if (c->runtime_objects && c->runtime_objects->types_ht) {
274 ht = apr_hash_get(c->runtime_objects->types_ht,
275 object_type_id->s, object_type_id->len);
277 object = impl_get_object(ht, object_id->s, object_id->len,
280 apr_hash_set(ht, object_id->s, object_id->len, NULL);
310 if (!runtime_objects) {
312 xctx->runtime_objects = runtime_objects;
315 if (!runtime_objects->types_ht) {
316 runtime_objects->types_ht = apr_hash_make(p);
320 ht = apr_hash_get(runtime_objects->types_ht, type->s, type->len);
325 apr_hash_set(runtime_objects->types_ht, type->s, type->len, ht);
329 test_ht = apr_hash_get(ht, id->s, id->len);
332 "Runtime object /afw/%"
338 apr_hash_set(ht, id->s, id->len,
object);
348 for (; *objects; objects++) {
363 for (; *inf; inf++) {
364 meta = (*inf)->rti.implementation_specific;
387 for (; *rti; rti++) {
395 unresolved_meta = (*rti)->implementation_specific;
398 inf->rti.implementation_specific = meta;
407 unresolved_properties = map->properties;
410 map->property_count, xctx);
411 map->properties = properties;
412 memcpy(properties, unresolved_properties,
414 map->property_count);
416 for (count = map->property_count; count > 0; count--, properties++)
418 properties->data_type =
420 properties->unresolved_data_type_id, xctx);
421 if (properties->unresolved_data_type_parameter_data_type_id) {
422 properties->data_type_parameter_data_type =
424 properties->unresolved_data_type_parameter_data_type_id, xctx);
431 if (!properties->data_type || !properties->
accessor)
460 meta = inf->rti.implementation_specific;
467 obj->
pub.meta.
id = object_id;
492 object_type_id, xctx);
495 "Runtime object map %" AFW_UTF8_FMT " is not registered",
500 object_id,
internal, p, xctx);
518 internal, xctx->env->p, xctx);
539 internal, xctx->env->p, xctx);
548 impl_resolve_untyped_object(
561 resolved->
pub.inf = &afw_runtime_inf_const_embedded_untyped_object;
564 resolved->
pub.meta.
id = property_name;
567 impl_resolve_properties(unresolved->
properties, embedding_object,
578 &afw_s_parentPaths, parent_paths, xctx);
600 false, data_type, unresolved->
count, p, xctx);
606 impl_resolve_property(
624 resolved->value = (unresolved->
value.boolean)
631 unresolved->
value.number, p, xctx);
636 unresolved->
value.integer, p, xctx);
640 list = impl_resolve_list(unresolved->
value.list, p, xctx);
646 object = impl_resolve_untyped_object(unresolved->
value.object,
647 embedding_object, name, p, xctx);
666 impl_resolve_properties(
678 for (count = 0, unresolved = properties;
679 *unresolved; count++, unresolved++);
685 for (unresolved = properties; *unresolved; unresolved++)
687 *resolved++ = impl_resolve_property(*unresolved, embedding_object,
716 unresolved->object_type_id, xctx);
724 o->
pub.meta.
id = unresolved->object_id;
728 if (unresolved->parent_path.len > 0) {
731 (
const void *)&unresolved->parent_path,
false,
737 o->
properties = impl_resolve_properties(unresolved->properties,
757 for (; *unresolved; unresolved++) {
774 impl_check_manifest_cb(
793 if (!providesObjects_value) {
805 for (iterator = NULL;;)
808 (
const void **)&entry, xctx);
818 s.len = entry->len - 5;
822 s.s = s.s + ctx->object_type_id->len;
823 s.len = s.len - ctx->object_type_id->len;
824 if (s.len == 0 || *(s.s) !=
'/') {
835 &afw_s_extensionId, xctx);
837 &afw_s_modulePath, xctx);
838 if (extension_id && module_path) {
863 for (c = xctx; c; c = c->parent) {
864 if (c->runtime_objects && c->runtime_objects->types_ht) {
865 ht = apr_hash_get(c->runtime_objects->types_ht,
866 object_type_id->s, object_type_id->len);
868 result = impl_get_object(ht, object_id->s, object_id->len,
876 ctx.object_type_id = object_type_id;
877 ctx.object_id = object_id;
879 &ctx, impl_check_manifest_cb, xctx);
880 for (c = xctx; c; c = c->parent) {
881 if (c->runtime_objects && c->runtime_objects->types_ht) {
882 ht = apr_hash_get(c->runtime_objects->types_ht,
883 object_type_id->s, object_type_id->len);
885 result = impl_get_object(ht, object_id->s, object_id->len,
910 object_type_id, NULL, context, callback, NULL, xctx->p, xctx);
917 return &impl_factory;
925 impl_afw_adaptor_factory_create_adaptor_cede_p (
934 &impl_afw_adaptor_inf,
980 self->pub.inf = &impl_afw_adaptor_session_inf;
981 self->pub.adaptor = instance;
982 self->pub.p = session_p;
1044 apr_hash_index_t *hi;
1053 object_type_id, criteria,
1054 context, callback, NULL, p, xctx);
1061 for (c = xctx; c; c = c->parent) {
1062 if (c->runtime_objects && c->runtime_objects->types_ht) {
1063 ht = apr_hash_get(c->runtime_objects->types_ht,
1064 object_type_id->s, object_type_id->len);
1066 for (hi = apr_hash_first(apr_p, ht); hi;
1067 hi = apr_hash_next(hi))
1069 apr_hash_this(hi, NULL, NULL, (
void **)&entry);
1070 obj = impl_entry_to_object(entry, xctx);
1075 if (callback(obj, context, xctx)) {
1085 callback(NULL, context, xctx);
1112 object_type_id, object_id,
1113 context, callback, adaptor_type_specific, p, xctx);
1121 callback(
object, context, xctx);
1139 AFW_ADAPTOR_IMPL_ERROR_ADAPTOR_IMMUTABLE;
1157 AFW_ADAPTOR_IMPL_ERROR_ADAPTOR_IMMUTABLE;
1175 AFW_ADAPTOR_IMPL_ERROR_ADAPTOR_IMMUTABLE;
1193 AFW_ADAPTOR_IMPL_ERROR_ADAPTOR_IMMUTABLE;
1216 impl_afw_adaptor_session_get_journal_interface (
1258 impl_afw_adaptor_session_get_object_type_cache_interface(
1266 &self->object_type_cache,
1268 instance,
true, xctx);
1270 return &
self->object_type_cache;
1283 impl_make_value_from_map_entry(
1289 const char *
internal;
1291 meta = instance->inf->rti.implementation_specific;
1293 if (prop->
offset == -1) {
1300 internal = (
const char *)
1304 return prop->
accessor(prop, (
const void *)(
internal + prop->
offset),
1365 meta = instance->inf->rti.implementation_specific;
1385 const char *
internal;
1387 meta = instance->inf->rti.implementation_specific;
1397 return impl_make_value_from_map_entry(instance, prop, xctx);
1403 internal = (
const char *)
1414 for (; *more; more++) {
1416 return (*more)->value;
1453 instance, property_name, p, xctx);
1472 const char *
internal;
1474 meta = instance->inf->rti.implementation_specific;
1497 if (!i->extra_prop) {
1503 map_entry = i->map_entry;
1505 *property_name = map_entry->
name;
1506 result = impl_make_value_from_map_entry(instance, map_entry,
1512 internal = (
const char *)
1523 if (i->extra_prop && *(i->extra_prop)) {
1524 result = (*(i->extra_prop))->value;
1525 *property_name = (*(i->extra_prop))->name;
1531 *property_name = NULL;
1554 instance, iterator, property_name, p, xctx);
Interface afw_interface implementation declares.
Interface afw_interface implementation declares.
AFW_DEFINE(const afw_object_t *)
Interface afw_interface implementation declares.
Adaptive Framework Core Internal.
const afw_object_t * impl_afw_adaptor_get_additional_metrics(const afw_adaptor_t *instance, const afw_pool_t *p, afw_xctx_t *xctx)
void impl_afw_adaptor_destroy(const afw_adaptor_t *instance, afw_xctx_t *xctx)
const afw_adaptor_session_t * impl_afw_adaptor_create_adaptor_session(const afw_adaptor_t *instance, afw_xctx_t *xctx)
afw_adaptor_impl_object_type_cache_initialize(afw_adaptor_object_type_cache_t *object_type_cache, const afw_adaptor_object_type_cache_inf_t *inf, const afw_adaptor_session_t *session, afw_boolean_t all_object_types_immutable, afw_xctx_t *xctx)
Initialize object type cache instance.
afw_adaptor_impl_create_cede_p(const afw_adaptor_inf_t *inf, afw_size_t instance_size, const afw_object_t *properties, const afw_pool_t *p, afw_xctx_t *xctx)
Developers should call this in all create functions for afw_adaptor.
afw_adaptor_impl_object_type_cache_inf
inf for an implementation of afw_adaptor_object_type_cache.
void impl_afw_adaptor_session_modify_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_adaptor_modify_entry_t *const *entry, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
void impl_afw_adaptor_session_replace_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_object_t *replacement_object, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
void impl_afw_adaptor_session_delete_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
void impl_afw_adaptor_session_retrieve_objects(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_query_criteria_t *criteria, void *context, afw_object_cb_t callback, const afw_object_t *adaptor_type_specific, const afw_pool_t *p, afw_xctx_t *xctx)
const afw_adaptor_transaction_t * impl_afw_adaptor_session_begin_transaction(const afw_adaptor_session_t *instance, afw_xctx_t *xctx)
void impl_afw_adaptor_session_destroy(const afw_adaptor_session_t *instance, afw_xctx_t *xctx)
const afw_adaptor_impl_index_t * impl_afw_adaptor_session_get_index_interface(const afw_adaptor_session_t *instance, afw_xctx_t *xctx)
const afw_utf8_t * impl_afw_adaptor_session_add_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *suggested_object_id, const afw_object_t *object, const afw_object_t *adaptor_type_specific, afw_xctx_t *xctx)
void impl_afw_adaptor_session_get_object(const afw_adaptor_session_t *instance, const afw_adaptor_impl_request_t *impl_request, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, void *context, afw_object_cb_t callback, const afw_object_t *adaptor_type_specific, const afw_pool_t *p, afw_xctx_t *xctx)
const afw_adaptor_key_value_t * impl_afw_adaptor_session_get_key_value_interface(const afw_adaptor_session_t *instance, afw_xctx_t *xctx)
afw_data_type_anyURI
Data type struct for anyURI.
#define afw_value_is_list_of_anyURI(A_VALUE)
Macro to determine if value is evaluated list of anyURI.
afw_value_create_double(double internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create function for unmanaged data type double value.
afw_value_create_integer(afw_integer_t internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create function for unmanaged data type integer value.
afw_value_create_list(const afw_list_t *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create function for unmanaged data type list value.
afw_value_allocate_list(const afw_pool_t *p, afw_xctx_t *xctx)
Allocate function for unmanaged data type list value.
afw_object_set_property_as_list(const afw_object_t *object, const afw_utf8_t *property_name, const afw_list_t *internal, afw_xctx_t *xctx)
Set property function for data type list values.
afw_value_create_object(const afw_object_t *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create function for unmanaged data type object value.
afw_value_create_string(const afw_utf8_t *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create function for unmanaged data type string value.
#define afw_object_old_get_property_as_string(object, property_name, xctx)
Get property function for data type string value.
#define afw_value_is_list_of_string(A_VALUE)
Macro to determine if value is evaluated list of string.
#define AFW_UTF8_FMT_ARG(A_STRING)
Convenience Macro for use with AFW_UTF8_FMT to specify arg.
afw_boolean_t(* afw_object_cb_t)(const afw_object_t *object, void *context, afw_xctx_t *xctx)
Typedef for afw_adaptor_session_object callback.
#define AFW_UTF8_LITERAL(A_STRING)
String literal initializer.
struct afw_iterator_s afw_iterator_t
#define AFW_UTF8_FMT
Format string specifier used for afw_utf8_t.
apr_size_t afw_size_t
size_t.
#define offsetof(type, member)
const afw_runtime_custom_t * afw_environment_get_runtime_custom(const afw_utf8_t *object_type_id, afw_xctx_t *xctx)
Get afw_runtime_custom_t for a custom handled runtime object type.
afw_environment_load_extension(const afw_utf8_t *extension_id, const afw_utf8_t *module_path, const afw_object_t *properties, afw_xctx_t *xctx)
Load and initialize environment extension.
const afw_data_type_t * afw_environment_get_data_type(const afw_utf8_t *type, afw_xctx_t *xctx)
Get the data_type associated with configuration entry type.
void afw_environment_register_runtime_object_map_inf(const afw_utf8_t *object_type_id, const afw_object_inf_t *inf, afw_xctx_t *xctx)
Register a runtime object map interface.
afw_runtime_value_accessor_t afw_environment_get_runtime_value_accessor(const afw_utf8_t *accessor_name, afw_xctx_t *xctx)
Get the interface associated with a runtime object map.
const afw_object_inf_t * afw_environment_get_runtime_object_map_inf(const afw_utf8_t *object_type_id, afw_xctx_t *xctx)
Get the interface associated with a runtime object map.
#define AFW_THROW_ERROR_FZ(code, xctx, format_z,...)
Macro used to set error and 0 rv in xctx and throw it.
#define AFW_THROW_ERROR_Z(code, message_z, xctx)
Macro used to set error and 0 rv in xctx and throw it.
#define afw_list_get_next_internal(instance, iterator, data_type, internal, xctx)
Call method get_next_internal of interface afw_list.
afw_list_create_wrapper_for_array(const void *array, afw_boolean_t indirect, const afw_data_type_t *data_type, afw_size_t count, const afw_pool_t *p, afw_xctx_t *xctx)
Create a immutable list wrapper for an array.
#define afw_memory_copy(to, from)
Copy to preallocated memory of same type.
afw_object_impl_internal_get_meta(const afw_object_t *instance, const afw_pool_t *p, afw_xctx_t *xctx)
A general impl of method get_meta for interface afw_object.
afw_object_impl_internal_get_property_meta(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
A general impl of method get_property_meta for interface afw_object.
afw_object_impl_internal_get_next_property_meta(const afw_object_t *instance, const afw_iterator_t **iterator, const afw_utf8_t **property_name, const afw_pool_t *p, afw_xctx_t *xctx)
A general impl of method get_next_property_meta for interface afw_object.
#define afw_object_get_property(instance, property_name, xctx)
Call method get_property of interface afw_object.
#define afw_object_add_reference(instance, xctx)
Call method add_reference of interface afw_object.
#define afw_object_release(instance, xctx)
Call method release of interface afw_object.
afw_object_path_make(const afw_utf8_t *adaptor_id, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_pool_t *p, afw_xctx_t *xctx)
Construct an object path in a specified pool.
#define afw_pool_malloc(instance, size, xctx)
Call method malloc of interface afw_pool.
#define afw_pool_calloc(instance, size, xctx)
Call method calloc of interface afw_pool.
#define afw_pool_get_apr_pool(instance)
Call method get_apr_pool of interface afw_pool.
#define afw_pool_release(instance, xctx)
Call method release of interface afw_pool.
#define afw_pool_calloc_type(instance, type, xctx)
Macro to allocate cleared memory to hold type in pool.
const afw_pool_t * afw_pool_create(const afw_pool_t *parent, afw_xctx_t *xctx)
Create a new pool.
#define afw_pool_malloc_type(instance, type, xctx)
Macro to allocate uncleared memory to hold type in pool.
afw_query_criteria_test_object(const afw_object_t *obj, const afw_query_criteria_t *criteria, const afw_pool_t *p, afw_xctx_t *xctx)
Test object against query criteria.
void afw_runtime_object_release(const afw_object_t *instance, afw_xctx_t *xctx)
Method release for runtime object.
afw_runtime_env_resolve_and_set_const_objects(const afw_runtime_unresolved_const_object_t *const *unresolved, afw_boolean_t overwrite, afw_xctx_t *xctx)
Resolve and set a NULL terminated list of object pointers in the xctx's runtime objects.
afw_size_t afw_runtime_object_get_count(const afw_object_t *instance, afw_xctx_t *xctx)
Method get_count for runtime object.
afw_runtime_object_create_indirect(const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, void *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create an indirect runtime object.
const afw_object_t *(* afw_runtime_object_wrapper_p_cb_t)(void *data, const afw_pool_t *p, afw_xctx_t *xctx)
Typedef used for afw_runtime_env_set_object_cb_wrapper() cb.
afw_runtime_env_create_and_set_indirect_object(const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, void *internal, afw_boolean_t overwrite, afw_xctx_t *xctx)
Create and set an indirect runtime object.
const afw_utf8_t * afw_runtime_object_get_object_type_id(const afw_object_t *instance, afw_xctx_t *xctx)
Method get_object_type_id for runtime object.
afw_runtime_xctx_set_objects(const afw_object_t *const *objects, afw_boolean_t overwrite, afw_xctx_t *xctx)
Set a list of object pointers in the xctx's runtime objects.
afw_boolean_t afw_runtime_object_has_property(const afw_object_t *instance, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Method has_property for runtime object.
const afw_value_t * afw_runtime_object_get_meta(const afw_object_t *instance, const afw_pool_t *p, afw_xctx_t *xctx)
Method get_meta for runtime object.
afw_runtime_get_internal_session(afw_xctx_t *xctx)
Get an internal session for runtime objects.
afw_runtime_env_set_object(const afw_object_t *object, afw_boolean_t overwrite, afw_xctx_t *xctx)
Set an object pointer in the environment's runtime objects.
const afw_value_t * afw_runtime_object_get_next_own_property(const afw_object_t *instance, const afw_iterator_t **iterator, const afw_utf8_t **property_name, afw_xctx_t *xctx)
Method get_next_property for runtime object.
afw_runtime_remove_object(const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, afw_xctx_t *xctx)
Remove object by object type id and object id.
afw_runtime_get_object(const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, afw_xctx_t *xctx)
Get a runtime object.
afw_runtime_resolve_const_object(const afw_runtime_unresolved_const_object_t *unresolved, const afw_pool_t *p, afw_xctx_t *xctx)
Resolve a runtime const object.
void afw_runtime_object_add_reference(const afw_object_t *instance, afw_xctx_t *xctx)
Method add_reference for runtime object.
afw_runtime_object_create_indirect_using_inf(const afw_object_inf_t *inf, const afw_utf8_t *object_id, void *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create an indirect runtime object.
const afw_object_setter_t * afw_runtime_object_get_setter(const afw_object_t *instance, afw_xctx_t *xctx)
Method get_setter for runtime object.
afw_runtime_xctx_set_object(const afw_object_t *object, afw_boolean_t overwrite, afw_xctx_t *xctx)
Set an object pointer in the xctx's runtime objects.
afw_runtime_env_create_and_set_indirect_object_using_inf(const afw_object_inf_t *inf, const afw_utf8_t *object_id, void *internal, afw_boolean_t overwrite, afw_xctx_t *xctx)
Create and set an indirect runtime object.
afw_runtime_register_object_map_infs(const afw_object_inf_t *const *inf, afw_xctx_t *xctx)
Register runtime object map interfaces.
const afw_value_t * afw_runtime_object_get_next_property_meta(const afw_object_t *instance, const afw_iterator_t **iterator, const afw_utf8_t **property_name, const afw_pool_t *p, afw_xctx_t *xctx)
Method get_next_property_meta for runtime object.
afw_runtime_foreach(const afw_utf8_t *object_type_id, void *context, afw_object_cb_t callback, afw_xctx_t *xctx)
Call a callback for each runtime object.
afw_runtime_get_adaptor_factory()
Get singleton factory for runtime adaptor.
afw_runtime_env_set_object_cb_wrapper(const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, afw_runtime_object_wrapper_p_cb_t callback, void *data, afw_boolean_t overwrite, afw_xctx_t *xctx)
Set environment object accessed via callback.
const afw_value_t * afw_runtime_object_get_property(const afw_object_t *instance, const afw_utf8_t *property_name, afw_xctx_t *xctx)
Method get_property for runtime object.
const afw_value_t * afw_runtime_object_get_property_meta(const afw_object_t *instance, const afw_utf8_t *property_name, const afw_pool_t *p, afw_xctx_t *xctx)
Method get_property_meta for runtime object.
afw_runtime_resolve_and_register_object_map_infs(const afw_interface_implementation_rti_t *const *rti, afw_xctx_t *xctx)
Create and register runtime object map interfaces.
afw_runtime_env_set_objects(const afw_object_t *const *objects, afw_boolean_t overwrite, afw_xctx_t *xctx)
Set a list of object pointers in the environment's runtime objects.
@ afw_runtime_unresolved_primitive_type_list
@ afw_runtime_unresolved_primitive_type_string
value points to afw_utf8_z_t.
@ afw_runtime_unresolved_primitive_type_object
@ afw_runtime_unresolved_primitive_type_integer
@ afw_runtime_unresolved_primitive_type_number
@ afw_runtime_unresolved_primitive_type_boolean
afw_boolean_t afw_utf8_starts_with_z(const afw_utf8_t *string, const afw_utf8_z_t *starts_with_z)
Check to see if a string starts with a utf8_z string.
afw_boolean_t afw_utf8_equal(const afw_utf8_t *s1, const afw_utf8_t *s2)
Check to see if a string equals another string.
#define afw_utf8_from_utf8_z(s_z, p, xctx)
Make utf-8 string without copy in specified pool.
afw_boolean_t afw_utf8_starts_with(const afw_utf8_t *string, const afw_utf8_t *starts_with)
Check to see if a string starts with another string.
#define afw_utf8_create(s, len, p, xctx)
Create utf-8 string without copy unless necessary in pool specified.
afw_value_false
Adaptive value false.
afw_value_true
Adaptive value true.
#define afw_xctx_calloc_type(type, xctx)
Macro to allocate cleared memory to hold type in xctx's pool.
Interface afw_adaptor_factory public struct.
Interface afw_adaptor_impl_index public struct.
Internal request info used by afw_adaptor_impl*() functions.
Interface afw_adaptor_journal public struct.
Interface afw_adaptor_key_value public struct.
Interface afw_adaptor_object_type_cache public struct.
Interface afw_adaptor public struct.
Interface afw_adaptor_session public struct.
Interface afw_adaptor_transaction public struct.
Interface afw_data_type public struct.
Struct for typedef afw_environment_t defined in afw_common.h.
const afw_pool_t * p
Pool used to hold environment.
Interface Implementation Run Time Information.
Interface afw_list public struct.
Interface afw_object_inf_s struct.
Interface afw_object public struct.
Interface afw_object_setter public struct.
Interface afw_pool public struct.
const afw_runtime_property_t *const * properties
afw_adaptor_session_get_object_t get_object
The session get_object method.
afw_adaptor_session_retrieve_objects_t retrieve_objects
The session retrieve_objects method.
Struct for runtime objects.
Struct for runtime object map property.
afw_size_t offset
Offset of internal property value in internal object struct.
const afw_utf8_t * accessor_name
Name of registered runtime value accessor function.
afw_runtime_value_accessor_t accessor
Accessor function or NULL.
const afw_utf8_t * name
Property name.
afw_size_t parent_paths_count
const afw_runtime_unresolved_property_t ** properties
const afw_utf8_t * parent_paths
Runtime unresolved property.
const afw_utf8_z_t * name
Property name.
afw_runtime_unresolved_value_t value
Unresolved value.
afw_runtime_unresolved_primitive_type_t type
Primitive type of value.
NFC normalized UTF-8 string.
struct for data type list values.
Interface afw_value public struct.
Interface afw_xctx public struct.