TransliterationRuleData::TransliterationRuleData(const TransliterationRuleData& other) :
UMemory(other), ruleSet(other.ruleSet),
variablesAreOwned(true),
variablesBase(other.variablesBase),
variablesLength(other.variablesLength)
{
UErrorCode status = U_ZERO_ERROR;
int32_t i = 0;
variableNames.setValueDeleter(uprv_deleteUObject);
int32_t pos = UHASH_FIRST; const UHashElement *e; while ((e = other.variableNames.nextElement(pos)) != nullptr) {
UnicodeString* value = new UnicodeString(*static_cast<const UnicodeString*>(e->value.pointer)); // Exit out if value could not be created. if (value == nullptr) { return;
}
variableNames.put(*static_cast<UnicodeString*>(e->key.pointer), value, status);
}
variables = nullptr; if (other.variables != nullptr) {
variables = static_cast<UnicodeFunctor**>(uprv_malloc(variablesLength * sizeof(UnicodeFunctor*))); /* test for nullptr */ if (variables == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR; return;
} for (i=0; i<variablesLength; ++i) {
variables[i] = other.variables[i]->clone(); if (variables[i] == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR; break;
}
}
} // Remove the array and exit if memory allocation error occurred. if (U_FAILURE(status)) { for (int32_t n = i-1; n >= 0; n--) { delete variables[n];
}
uprv_free(variables);
variables = nullptr; return;
}
// Do this last, _after_ setting up variables[].
ruleSet.setData(this); // ruleSet must already be frozen
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.