/** * string_range_function: * @argc: * @argv: * @ei: * @func: (scope call): * @flags: * @func_error: * * Returns: (transfer full): **/ GnmValue * string_range_function (int argc, GnmExprConstPtr const *argv, GnmFuncEvalInfo *ei, string_range_function_t func, CollectFlags flags, GnmStdError func_error) { GnmValue *error = NULL; GPtrArray *vals; char *res = NULL; int err; vals = collect_strings (argc, argv, ei->pos, flags, &error); if (!vals) return error; err = func (vals, &res); collect_strings_free (vals); if (err) { g_free (res); return value_new_error_std (ei->pos, func_error); } else { return value_new_string_nocopy (res); } }
status_t XMLNode::flatten(const sp<AaptFile>& dest, bool stripComments, bool stripRawValues) const { StringPool strings; Vector<uint32_t> resids; // First collect just the strings for attribute names that have a // resource ID assigned to them. This ensures that the resource ID // array is compact, and makes it easier to deal with attribute names // in different namespaces (and thus with different resource IDs). collect_resid_strings(&strings, &resids); // Next collect all remainibng strings. collect_strings(&strings, &resids, stripComments, stripRawValues); #if 0 // No longer compiles NOISY(printf("Found strings:\n"); const size_t N = strings.size(); for (size_t i=0; i<N; i++) { printf("%s\n", String8(strings.entryAt(i).string).string()); } );