Deduplicated string value initializations.

This commit is contained in:
Valentin Bartenev
2018-09-20 15:27:06 +03:00
parent b5d76454ed
commit 2dfd8ffc2f
2 changed files with 23 additions and 64 deletions

View File

@@ -163,6 +163,23 @@ nxt_conf_get_string(nxt_conf_value_t *value, nxt_str_t *str)
} }
void
nxt_conf_set_string(nxt_conf_value_t *value, nxt_str_t *str)
{
if (str->length > NXT_CONF_MAX_SHORT_STRING) {
value->type = NXT_CONF_VALUE_STRING;
value->u.string.length = str->length;
value->u.string.start = str->start;
} else {
value->type = NXT_CONF_VALUE_SHORT_STRING;
value->u.str.length = str->length;
nxt_memcpy(value->u.str.start, str->start, str->length);
}
}
int64_t int64_t
nxt_conf_get_integer(nxt_conf_value_t *value) nxt_conf_get_integer(nxt_conf_value_t *value)
{ {
@@ -205,23 +222,11 @@ void
nxt_conf_set_member(nxt_conf_value_t *object, nxt_str_t *name, nxt_conf_set_member(nxt_conf_value_t *object, nxt_str_t *name,
nxt_conf_value_t *value, uint32_t index) nxt_conf_value_t *value, uint32_t index)
{ {
nxt_conf_value_t *name_value;
nxt_conf_object_member_t *member; nxt_conf_object_member_t *member;
member = &object->u.object->members[index]; member = &object->u.object->members[index];
name_value = &member->name;
if (name->length > NXT_CONF_MAX_SHORT_STRING) { nxt_conf_set_string(&member->name, name);
name_value->type = NXT_CONF_VALUE_STRING;
name_value->u.string.length = name->length;
name_value->u.string.start = name->start;
} else {
name_value->type = NXT_CONF_VALUE_SHORT_STRING;
name_value->u.str.length = name->length;
nxt_memcpy(name_value->u.str.start, name->start, name->length);
}
member->value = *value; member->value = *value;
} }
@@ -231,37 +236,13 @@ void
nxt_conf_set_member_string(nxt_conf_value_t *object, nxt_str_t *name, nxt_conf_set_member_string(nxt_conf_value_t *object, nxt_str_t *name,
nxt_str_t *value, uint32_t index) nxt_str_t *value, uint32_t index)
{ {
nxt_conf_value_t *set;
nxt_conf_object_member_t *member; nxt_conf_object_member_t *member;
member = &object->u.object->members[index]; member = &object->u.object->members[index];
set = &member->name;
if (name->length > NXT_CONF_MAX_SHORT_STRING) { nxt_conf_set_string(&member->name, name);
set->type = NXT_CONF_VALUE_STRING;
set->u.string.length = name->length;
set->u.string.start = name->start;
} else { nxt_conf_set_string(&member->value, value);
set->type = NXT_CONF_VALUE_SHORT_STRING;
set->u.str.length = name->length;
nxt_memcpy(set->u.str.start, name->start, name->length);
}
set = &member->value;
if (value->length > NXT_CONF_MAX_SHORT_STRING) {
set->type = NXT_CONF_VALUE_STRING;
set->u.string.length = value->length;
set->u.string.start = value->start;
} else {
set->type = NXT_CONF_VALUE_SHORT_STRING;
set->u.str.length = value->length;
nxt_memcpy(set->u.str.start, value->start, value->length);
}
} }
@@ -269,23 +250,11 @@ void
nxt_conf_set_member_integer(nxt_conf_value_t *object, nxt_str_t *name, nxt_conf_set_member_integer(nxt_conf_value_t *object, nxt_str_t *name,
int64_t value, uint32_t index) int64_t value, uint32_t index)
{ {
nxt_conf_value_t *name_value;
nxt_conf_object_member_t *member; nxt_conf_object_member_t *member;
member = &object->u.object->members[index]; member = &object->u.object->members[index];
name_value = &member->name;
if (name->length > NXT_CONF_MAX_SHORT_STRING) { nxt_conf_set_string(&member->name, name);
name_value->type = NXT_CONF_VALUE_STRING;
name_value->u.string.length = name->length;
name_value->u.string.start = name->start;
} else {
name_value->type = NXT_CONF_VALUE_SHORT_STRING;
name_value->u.str.length = name->length;
nxt_memcpy(name_value->u.str.start, name->start, name->length);
}
member->value.u.integer = value; member->value.u.integer = value;
member->value.type = NXT_CONF_VALUE_INTEGER; member->value.type = NXT_CONF_VALUE_INTEGER;
@@ -683,18 +652,7 @@ nxt_conf_op_compile(nxt_mp_t *mp, nxt_conf_op_t **ops, nxt_conf_value_t *root,
return NXT_ERROR; return NXT_ERROR;
} }
if (token.length > NXT_CONF_MAX_SHORT_STRING) { nxt_conf_set_string(&member->name, &token);
member->name.u.string.length = token.length;
member->name.u.string.start = token.start;
member->name.type = NXT_CONF_VALUE_STRING;
} else {
member->name.u.str.length = token.length;
nxt_memcpy(member->name.u.str.start, token.start, token.length);
member->name.type = NXT_CONF_VALUE_SHORT_STRING;
}
member->value = *value; member->value = *value;

View File

@@ -101,6 +101,7 @@ void nxt_conf_json_position(u_char *start, u_char *pos, nxt_uint_t *line,
nxt_int_t nxt_conf_validate(nxt_conf_validation_t *vldt); nxt_int_t nxt_conf_validate(nxt_conf_validation_t *vldt);
NXT_EXPORT void nxt_conf_get_string(nxt_conf_value_t *value, nxt_str_t *str); NXT_EXPORT void nxt_conf_get_string(nxt_conf_value_t *value, nxt_str_t *str);
NXT_EXPORT void nxt_conf_set_string(nxt_conf_value_t *value, nxt_str_t *str);
NXT_EXPORT int64_t nxt_conf_get_integer(nxt_conf_value_t *value); NXT_EXPORT int64_t nxt_conf_get_integer(nxt_conf_value_t *value);
// FIXME reimplement and reorder functions below // FIXME reimplement and reorder functions below