41 impl_parse_schema_entry(
48 impl_parse_definition(
57 impl_retrieve_objects(
67 impl_make_property_type_and_handler_hash_tables(
74 impl_make_object_types(
85 return apr_hash_get(ht, id->s, id->len);
98 res = afw_ldap_internal_search_s(session,
"", LDAP_SCOPE_BASE,
99 "(objectclass=*)", xctx);
102 e = ldap_first_entry(session->ld, res);
105 "ldap_first_entry() failed.", xctx);
108 return afw_ldap_internal_create_object_from_entry(session,
109 &afw_ldap_s__AdaptiveLdapRootDse_, &afw_s_current,
128 res = afw_ldap_internal_search_s(session, s,
129 LDAP_SCOPE_BASE,
"(objectclass=*)", xctx);
132 e = ldap_first_entry(session->ld, res);
135 "ldap_first_entry() failed.", xctx);
138 return afw_ldap_internal_create_object_from_entry(session,
139 &afw_ldap_s__AdaptiveLdapSchema_, &afw_s_current,
145 impl_create_lexical_analyzer(
const afw_utf8_t *s,
154 self->end = s->s + s->len;
168 for (c = self->c; c < self->end; ++c) {
169 if (*c !=
' ' )
break;
174 if (self->c >= self->end) {
180 for (c = ++(self->c); c < self->end && *c !=
'\''; ++c);
181 if (c >= self->end) {
184 self->token.s =
self->c;
185 self->token.len = c -
self->c;
187 self->p, self->xctx);
193 if (*c ==
'(' || *c ==
')' || *c ==
'$') {
196 for (c = self->c; c < self->end && *c !=
' '; ++c);
198 self->token.s =
self->c;
199 self->token.len = c -
self->c;
201 self->p, self->xctx);
213 if (*(self->tkn) ==
'\'') {
215 string->len = strlen(self->tkn);
216 if (string->len < 2) {
220 string->s =
self->tkn + 1;
225 string->s =
self->tkn;
226 string->len = strlen(self->tkn);
242 tkn = impl_get_token(
self);
253 tkn = impl_get_token(
self);
258 "Error parsing schema",
279 tkn = impl_get_token(
self);
282 impl_set_string(
self, s++);
288 impl_set_string(
self, &
string);
301 impl_parse_schema_entry(
313 self = impl_create_lexical_analyzer(
string, p, xctx);
317 tkn = impl_get_token(
self);
323 val = impl_get_value(
self);
327 while ((kwd = impl_get_token(
self))) {
331 tkn = impl_get_token(
self);
356 val = impl_get_value(
self);
371 impl_parse_definition_add(
387 apr_hash_set(ht, object_id->s, object_id->len, obj);
391 impl_parse_definition(
414 if (!value)
return NULL;
424 for (iterator = NULL;;) {
429 obj = impl_parse_schema_entry(&afw_ldap_s_numericoid, e,
433 &afw_ldap_s_NAME, xctx);
437 &afw_ldap_s_numericoid, xctx);
443 for (iterator2 = NULL;;)
447 &iterator2, NULL, (
const void **)&name, xctx);
451 impl_parse_definition_add(ht, obj, adaptor_id, object_type_id,
452 name, metadata, xctx);
460 impl_parse_definition_add(ht, obj, adaptor_id, object_type_id,
id,
470 impl_make_property_type_and_handler_hash_tables(
478 apr_hash_index_t *hi;
482 apr_hash_t *ht_attribute_types;
500 metadata->value_meta_objects = ht;
504 metadata->attribute_types = ht_attribute_types;
508 metadata->attribute_type_objects);
509 hi; hi = apr_hash_next(hi))
511 apr_hash_this(hi, &key, &klen, (
void **)&attribute_type_object);
514 attribute_type->attribute_type_object = attribute_type_object;
521 &afw_ldap_s_SYNTAX, xctx);
525 error_id = &afw_ldap_s_SYNTAX;
526 for (len = syntax->len, s = syntax->s;
527 len > 0 && *s !=
'{';
529 syntax_oid.s = syntax->s;
530 syntax_oid.len = s - syntax->s;
532 &syntax_oid, p, xctx);
536 temp.s = syntax->s + syntax_oid.len + 1;
537 if (len < 3)
goto error;
539 if (temp.s[temp.len] !=
'}')
goto error;
540 attribute_type->upper_bound =
543 attribute_type->upper_bound_present =
true;
547 attribute_type->is_single =
549 attribute_type_object, &afw_ldap_s_a_single_dash_value,
553 attribute_type->lower_bound =
555 attribute_type_object, &afw_ldap_s_a_X_NDS_LOWER_BOUND,
556 &attribute_type->lower_bound_present, xctx);
559 if (!attribute_type->upper_bound_present) {
560 attribute_type->upper_bound =
562 attribute_type_object, &afw_ldap_s_a_X_NDS_UPPER_BOUND,
563 &attribute_type->upper_bound_present, xctx);
568 &afw_ldap_s_a_NO_USER_MODIFICATION, xctx))
570 attribute_type->never_allow_write =
true;
575 &afw_ldap_s_a_X_NDS_HIDDEN, xctx))
577 attribute_type->never_allow_read =
true;
578 attribute_type->never_allow_write =
true;
583 &afw_ldap_s_a_X_NDS_NONREMOVABLE, xctx))
585 attribute_type->never_allow_write =
true;
590 &afw_ldap_s_a_X_NDS_READ_FILTERED, xctx))
592 attribute_type->operational =
true;
593 attribute_type->never_allow_write =
true;
602 metadata, attribute_type, xctx);
605 if (!attribute_type->never_allow_read) {
608 attribute_type->property_type_object =
612 attribute_type->property_type_object,
613 adaptor_id, &afw_s__AdaptiveValueMeta_,
id, xctx);
614 attribute_type->property_name = id;
617 if (attribute_type->is_single) {
618 if (attribute_type->data_type_id_value) {
620 attribute_type->property_type_object,
621 &afw_s_dataType, attribute_type->data_type_id_value,
627 attribute_type->property_type_object,
630 if (attribute_type->data_type_id_value) {
632 attribute_type->property_type_object,
633 &afw_s_dataTypeParameter,
634 attribute_type->data_type_id_value,
640 if (attribute_type->lower_bound_present) {
642 attribute_type->lower_bound, p, xctx);
644 attribute_type->property_type_object,
645 &afw_s_minValue,
string, xctx);
650 if (attribute_type->upper_bound_present) {
652 attribute_type->upper_bound, p, xctx);
654 attribute_type->property_type_object,
655 &afw_s_maxValue,
string, xctx);
659 if (attribute_type->never_allow_write) {
661 attribute_type->property_type_object,
669 attribute_type->property_type_object,
677 attribute_type->property_type_object,
678 &afw_s_description, value, xctx);
682 apr_hash_set(ht, id->s, id->len,
683 attribute_type->property_type_object);
689 apr_hash_set(ht_attribute_types, key, klen, attribute_type);
702 impl_a_property_to_object_type(
716 attribute_type = apr_hash_get(metadata->attribute_types,
718 if (!attribute_type || attribute_type->never_allow_read) {
727 parent = apr_hash_get(metadata->value_meta_objects,
745 impl_properties_to_object_type(
758 req_pn.s = (required) ?
"MUST" :
"MAY";
759 req_pn.len = strlen(req_pn.s);
764 for (iterator = NULL;;)
767 &iterator, NULL, (
const void **)&s, xctx);
771 impl_a_property_to_object_type(required, s, properties, metadata,
776 impl_a_property_to_object_type(required,
787 impl_set_synthetic_object_type(apr_hash_t *ht,
794 &afw_s__AdaptiveObjectType_, object_type_id, xctx);
797 "Missing object /afw/_AdaptiveObjectType_/%" AFW_UTF8_FMT,
800 apr_hash_set(ht, object_type_id->s, object_type_id->len,
815 (!result->attribute_type ||
818 result = result->next);
830 impl_add_parents_and_property_types(
864 object_type_object = impl_get(metadata->object_type_objects,
866 if (!object_type_object) {
871 result = apr_hash_get(metadata->object_type_attributes,
872 object_type_id->s, object_type_id->len);
880 apr_hash_set(metadata->object_type_attributes,
881 object_type_id->s, object_type_id->len,
882 object_type_attribute);
883 result = object_type_attribute;
887 object_type_object, &afw_s_propertyTypes, xctx);
888 if (property_types_object) {
890 while ((property_type_object =
892 property_types_object, &iterator, &property_name, xctx))
895 attribute_type = apr_hash_get(metadata->attribute_types,
896 property_name->s, property_name->len);
897 if (object_type_attribute->attribute_type) {
898 object_type_attribute->next =
902 object_type_attribute = object_type_attribute->next;
904 object_type_attribute->attribute_type = attribute_type;
905 object_type_attribute->property_type_object =
906 property_types_object;
907 object_type_attribute->is_required =
909 &afw_s_required, xctx);
917 &afw_ldap_s_SUP, xctx);
931 for (iterator = NULL;;) {
933 (
const void **)&s, xctx);
944 for (parent_id2 = parent_id, count2 = count, i = 0;
948 parent = impl_get(metadata->object_type_objects, parent_id2);
959 for (i = 0; i < count; i++, parent_id++) {
960 parent = impl_get(metadata->object_type_objects,
973 parent_object_class_object =
974 impl_get(metadata->object_class_objects, parent_id);
975 if (!parent_object_class_object) {
978 parent_object_type_attribute =
979 impl_add_parents_and_property_types(metadata,
980 parent_object_class_object, xctx);
984 parent_object_type_attribute;
985 parent_object_type_attribute =
986 parent_object_type_attribute->next
989 if (parent_object_type_attribute->attribute_type &&
991 parent_object_type_attribute->attribute_type->
994 if (object_type_attribute->attribute_type) {
995 object_type_attribute->next =
999 object_type_attribute = object_type_attribute->next;
1001 object_type_attribute->attribute_type =
1002 parent_object_type_attribute->attribute_type;
1003 object_type_attribute->property_type_object =
1004 parent_object_type_attribute->property_type_object;
1005 object_type_attribute->is_required =
1006 parent_object_type_attribute->is_required;
1010 object_type_attribute->next =
1014 object_type_attribute = object_type_attribute->next;
1015 object_type_attribute->next = apr_hash_get(
1016 metadata->object_type_attributes,
1017 parent_id->s, parent_id->len);
1021 parent_paths, xctx);
1030 impl_make_object_types(
1036 apr_hash_index_t *hi;
1054 metadata->object_class_objects);
1055 hi; hi = apr_hash_next(hi))
1057 apr_hash_this(hi, NULL, NULL, (
void **)&object_class_object);
1063 &afw_ldap_s__AdaptiveObjectType_,
id, xctx);
1068 &afw_ldap_s_STRUCTURAL, xctx))
1085 object_type_object, &afw_s_otherProperties, xctx);
1090 apr_hash_set(metadata->object_type_objects, id->s, id->len,
1091 object_type_object);
1098 "_AdaptiveObjectType representation of LDAP object"
1102 default_description->s, default_description->len,
1111 &afw_s_propertyTypes, xctx);
1114 impl_properties_to_object_type(
AFW_TRUE,
1115 object_class_object, property_types_object, metadata, xctx);
1116 impl_properties_to_object_type(
AFW_FALSE,
1117 object_class_object, property_types_object, metadata, xctx);
1125 metadata->object_class_objects);
1126 hi; hi = apr_hash_next(hi))
1128 apr_hash_this(hi, NULL, NULL, (
void **)&object_class_object);
1129 impl_add_parents_and_property_types(
1130 metadata, object_class_object, xctx);
1134 impl_set_synthetic_object_type(metadata->object_type_objects,
1135 &afw_s__AdaptiveObjectType_, xctx);
1136 impl_set_synthetic_object_type(metadata->object_type_objects,
1137 &afw_s__AdaptiveValueMeta_, xctx);
1138 impl_set_synthetic_object_type(metadata->object_type_objects,
1139 &afw_ldap_s__AdaptiveLdapAttributeType_, xctx);
1140 impl_set_synthetic_object_type(metadata->object_type_objects,
1141 &afw_ldap_s__AdaptiveLdapMatchingRuleUse_, xctx);
1142 impl_set_synthetic_object_type(metadata->object_type_objects,
1143 &afw_ldap_s__AdaptiveLdapMatchingRuleUse_, xctx);
1144 impl_set_synthetic_object_type(metadata->object_type_objects,
1145 &afw_ldap_s__AdaptiveLdapMatchingRule_, xctx);
1146 impl_set_synthetic_object_type(metadata->object_type_objects,
1147 &afw_ldap_s__AdaptiveLdapObjectClass_, xctx);
1148 impl_set_synthetic_object_type(metadata->object_type_objects,
1149 &afw_ldap_s__AdaptiveLdapRootDse_, xctx);
1150 impl_set_synthetic_object_type(metadata->object_type_objects,
1151 &afw_ldap_s__AdaptiveLdapSchema_, xctx);
1152 impl_set_synthetic_object_type(metadata->object_type_objects,
1153 &afw_ldap_s__AdaptiveLdapSyntax_, xctx);
1173 new_metadata->p = p;
1179 new_metadata->rootdse_object =
1180 impl_get_rootdse(session, p, xctx);
1184 &afw_ldap_s_subschemaSubentry,
1189 new_metadata->subschema_subentry =
1193 new_metadata->schema_object =
1194 impl_get_schema(session,
1195 new_metadata->subschema_subentry, p, xctx);
1197 new_metadata->attribute_type_objects =
1198 impl_parse_definition(
1199 &adaptor->pub.adaptor_id,
1200 &afw_ldap_s__AdaptiveLdapAttributeType_,
1201 &afw_ldap_s_attributeTypes,
1202 new_metadata, xctx);
1204 new_metadata->ldap_syntax_objects =
1205 impl_parse_definition(
1206 &adaptor->pub.adaptor_id,
1207 &afw_ldap_s__AdaptiveLdapSyntax_,
1208 &afw_ldap_s_ldapSyntaxes,
1209 new_metadata, xctx);
1211 new_metadata->matching_rule_objects =
1212 impl_parse_definition(
1213 &adaptor->pub.adaptor_id,
1214 &afw_ldap_s__AdaptiveLdapMatchingRule_,
1215 &afw_ldap_s_matchingRules,
1216 new_metadata, xctx);
1218 new_metadata->matching_rule_use_objects =
1219 impl_parse_definition(
1220 &adaptor->pub.adaptor_id,
1221 &afw_ldap_s__AdaptiveLdapMatchingRuleUse_,
1222 &afw_ldap_s_matchingRuleUse,
1223 new_metadata, xctx);
1225 new_metadata->object_class_objects =
1226 impl_parse_definition(
1227 &adaptor->pub.adaptor_id,
1228 &afw_ldap_s__AdaptiveLdapObjectClass_,
1229 &afw_ldap_s_objectClasses,
1230 new_metadata, xctx);
1232 impl_make_property_type_and_handler_hash_tables(
1233 &adaptor->pub.adaptor_id,
1234 new_metadata, xctx);
1236 impl_make_object_types(
1237 &adaptor->pub.adaptor_id,
1238 new_metadata, xctx);
1244 old_metadata = adaptor->metadata;
1245 adaptor->metadata = new_metadata;
1257 impl_retrieve_objects(
1265 apr_hash_index_t *hi;
1270 hi = apr_hash_next(hi))
1272 apr_hash_this(hi, NULL, NULL, (
void **)&obj);
1276 callback(obj, context, xctx);
1301 ht =
self->adaptor->metadata->object_type_objects;
1308 ht =
self->adaptor->metadata->value_meta_objects;
1313 &afw_ldap_s__AdaptiveLdapObjectClass_))
1315 ht =
self->adaptor->metadata->object_class_objects;
1320 &afw_ldap_s__AdaptiveLdapAttributeType_))
1322 ht =
self->adaptor->metadata->attribute_type_objects;
1327 &afw_ldap_s__AdaptiveLdapSyntax_))
1329 ht =
self->adaptor->metadata->ldap_syntax_objects;
1334 &afw_ldap_s__AdaptiveLdapMatchingRule_))
1336 ht =
self->adaptor->metadata->matching_rule_objects;
1341 &afw_ldap_s__AdaptiveLdapMatchingRuleUse_))
1343 ht =
self->adaptor->metadata->matching_rule_use_objects;
1348 impl_retrieve_objects(
self, ht, criteria, context, callback, xctx);
1356 &afw_ldap_s__AdaptiveLdapRootDse_))
1358 obj =
self->adaptor->metadata->rootdse_object;
1362 callback(obj, context, xctx);
1368 &afw_ldap_s__AdaptiveLdapSchema_))
1370 obj =
self->adaptor->metadata->schema_object;
1374 callback(obj, context, xctx);
1381 callback(NULL, context, xctx);
1392 return apr_hash_get(ht, object_id->s, object_id->len);
1412 if (
afw_utf8_equal(object_type_id, &afw_ldap_s__AdaptiveLdapRootDse_))
1415 obj =
self->adaptor->metadata->rootdse_object;
1421 &afw_ldap_s__AdaptiveLdapSchema_))
1424 obj =
self->adaptor->metadata->schema_object;
1429 else if (
afw_utf8_equal(object_type_id, &afw_s__AdaptiveObjectType_))
1431 obj = impl_get_object(
self,
1432 self->adaptor->metadata->object_type_objects,
1437 else if (
afw_utf8_equal(object_type_id, &afw_s__AdaptiveValueMeta_))
1439 obj = impl_get_object(
self,
1440 self->adaptor->metadata->value_meta_objects,
1446 &afw_ldap_s__AdaptiveLdapObjectClass_))
1448 obj = impl_get_object(
self,
1449 self->adaptor->metadata->object_class_objects,
1455 &afw_ldap_s__AdaptiveLdapAttributeType_))
1457 obj = impl_get_object(
self,
1458 self->adaptor->metadata->attribute_type_objects,
1464 &afw_ldap_s__AdaptiveLdapSyntax_))
1466 obj = impl_get_object(
self,
1467 self->adaptor->metadata->ldap_syntax_objects,
1473 &afw_ldap_s__AdaptiveLdapMatchingRule_))
1475 obj = impl_get_object(
self,
1476 self->adaptor->metadata->matching_rule_objects,
1482 &afw_ldap_s__AdaptiveLdapMatchingRuleUse_))
1484 obj = impl_get_object(
self,
1485 self->adaptor->metadata->matching_rule_use_objects,
1490 callback(obj, context, xctx);
1495 afw_ldap_metadata_handles(
const afw_utf8_t *object_type)
1507 afw_ldap_metadata_bv_to_value(
1511 struct berval * *bv,
1517 if (attribute && attribute->attribute_type)
1519 result = attribute->attribute_type->syntax_handler->to_value(
1520 attribute->attribute_type,
1521 attribute->attribute_type->syntax_handler->data,
1526 result = afw_ldap_internal_syntax_handler_unknown_to_value(
1539 attribute_type = apr_hash_get(
1540 session->adaptor->metadata->attribute_types,
1541 attribute_name->s, attribute_name->len);
1542 if (!attribute_type) {
1549 "Missing value calling afw_ldap_metadata_value_to_bv()",
1552 return attribute_type->syntax_handler->to_ber(
1553 attribute_type, attribute_type->syntax_handler->data, value,
1554 session->pub.p, xctx);
Adaptive Framework Core API.
afw_ldap_internal_adaptor_session_t * afw_ldap_internal_adaptor_session_create(afw_ldap_internal_adaptor_t *adaptor, afw_xctx_t *xctx)
Internal create an LDAP adaptor session.
void afw_ldap_internal_syntax_handler_assign(afw_ldap_metadata_t *metadata, afw_ldap_metadata_attribute_type_t *attribute_type, afw_xctx_t *xctx)
afw_adaptor_session_release(const afw_adaptor_session_t *session, afw_xctx_t *xctx)
Release an adaptor session created by afw_adaptor_session_create().
afw_data_type_anyURI
Data type struct for anyURI.
afw_list_of_anyURI_add(const afw_list_t *instance, const afw_utf8_t *value, afw_xctx_t *xctx)
Add value from list of anyURI.
afw_object_set_property_as_boolean(const afw_object_t *object, const afw_utf8_t *property_name, afw_boolean_t internal, afw_xctx_t *xctx)
Set property function for data type boolean values.
#define afw_object_old_get_property_as_boolean(object, property_name, found, xctx)
Get property function for data type boolean 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_data_type_list_id_value
Adaptive string value for "list".
#define afw_object_old_get_property_as_object(object, property_name, xctx)
Get property function for data type object value.
#define afw_object_old_get_next_property_as_object(object, iterator, property_name, xctx)
Get next property function for 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.
afw_data_type_string
Data type struct for string.
#define afw_value_is_string(A_VALUE)
Macro to determine if value is evaluated string.
afw_object_set_property_as_string(const afw_object_t *object, const afw_utf8_t *property_name, const afw_utf8_t *internal, afw_xctx_t *xctx)
Set property function for data type string values.
#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.
#define AFW_UTF8_Z_LEN
String is NUL (0) terminate.
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.
struct afw_iterator_s afw_iterator_t
#define AFW_UTF8_FMT
Format string specifier used for afw_utf8_t.
afw_utf8_octet_t afw_utf8_z_t
NFC normalized UTF-8 null terminated string.
char afw_utf8_octet_t
8 bits of utf-8 codepoint.
apr_size_t afw_size_t
size_t.
#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.
#define afw_list_get_count(instance, xctx)
Call method get_count 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_list_of_create(data_type, p, xctx)
Create an list of a specific data type in memory.
#define afw_memory_copy(to, from)
Copy to preallocated memory of same type.
afw_integer_t afw_number_utf8_to_integer(const afw_utf8_t *s, const afw_pool_t *p, afw_xctx_t *xctx)
Convert a utf8 string to integer in specified pool.
afw_number_integer_to_utf8(afw_integer_t i, const afw_pool_t *p, afw_xctx_t *xctx)
Convert an integer to utf8 in specified pool.
#define afw_object_get_property(instance, property_name, xctx)
Call method get_property of interface afw_object.
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.
#define AFW_OBJECT_S_OBJECT_TYPE_ID_VALUE_META
String object type id for Property Type object.
#define afw_object_create(p, xctx)
Create an empty unmanaged object in memory.
#define AFW_OBJECT_S_OBJECT_TYPE_ID_OBJECT_TYPE
String object type id for Object Type object.
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.
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.
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.
#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.
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.
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_boolean_t afw_utf8_equal(const afw_utf8_t *s1, const afw_utf8_t *s2)
Check to see if a string equals another string.
afw_utf8_z_create(const afw_utf8_octet_t *s, afw_size_t len, const afw_pool_t *p, afw_xctx_t *xctx)
Create a NFC Normalized zero terminated UTF-8 string in specified pool.
const afw_utf8_t * afw_utf8_clone(const afw_utf8_t *string, const afw_pool_t *p, afw_xctx_t *xctx)
Clone a utf-8 string into a specific pool.
afw_utf8_printf(const afw_pool_t *p, afw_xctx_t *xctx, const afw_utf8_z_t *format,...)
Create a utf-8 string using a c format string in specified pool.
afw_boolean_t afw_utf8_z_equal(const afw_utf8_z_t *s1, const afw_utf8_z_t *s2)
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_as_utf8(const afw_value_t *value, const afw_pool_t *p, afw_xctx_t *xctx)
afw_value_false
Adaptive value false.
afw_value_one_and_only_as_utf8(const afw_value_t *value, const afw_pool_t *p, afw_xctx_t *xctx)
Return result of afw_value_one_and_only() as utf8.
#define afw_value_is_defined_and_evaluated(A_VALUE)
Macro to determine if value is defined and evaluated.
afw_value_make_single_string(const afw_utf8_octet_t *s, afw_size_t len, const afw_pool_t *p, afw_xctx_t *xctx)
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_session public struct.
Interface afw_list public struct.
Interface afw_object public struct.
Interface afw_pool public struct.
NFC normalized UTF-8 string.
struct for data type list values.
Interface afw_value public struct.
struct for data type string values.
Interface afw_xctx public struct.