X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1cbf45bd6ba6b0935c15e5b783ca6ec65a1e49cc..47a73b5d8591f5405691f45ee0c5884807ea7471:/src/xbt/xbt_str.c diff --git a/src/xbt/xbt_str.c b/src/xbt/xbt_str.c index b0752146d0..36002e5074 100644 --- a/src/xbt/xbt_str.c +++ b/src/xbt/xbt_str.c @@ -1,13 +1,10 @@ -/* $Id$ */ - /* xbt_str.c - various helping functions to deal with strings */ -/* Copyright (C) 2005-2008 The SimGrid Team. */ -/* All rights reserved. */ +/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. - */ + * under the terms of the license (GNU LGPL) which comes with this package. */ #include "portable.h" #include "xbt/misc.h" @@ -176,7 +173,7 @@ end: * @param str the string to modify * @param from char to search * @param to char to put instead - * @param amount amount of changes to do (=0 means all) + * @param occurence number of changes to do (=0 means all) */ void xbt_str_subst(char *str, char from, char to, int occurence) { @@ -322,9 +319,10 @@ xbt_dynar_t xbt_str_split_str(const char *s, const char *sep) /** @brief Splits a string into a dynar of strings, taking quotes into account * * It basically does the same argument separation than the shell, where white - * spaces can be escaped and where arguments are never splitted within a + * spaces can be escaped and where arguments are never split within a * quote group. * Several subsequent spaces are ignored (unless within quotes, of course). + * You may want to trim the input string, if you want to avoid empty entries * */ @@ -341,8 +339,7 @@ xbt_dynar_t xbt_str_split_quoted(const char *s) return res; beg = str_to_free = xbt_strdup(s); - /* trim leading spaces */ - xbt_str_ltrim(beg, " "); + /* do not trim leading spaces: caller responsability to clean his cruft */ end = beg; while (!done) { @@ -406,7 +403,9 @@ xbt_dynar_t xbt_str_split_quoted(const char *s) } beg = ++end; - xbt_str_ltrim(beg, " "); + /* trim within the string, manually to speed things up */ + while (*beg == ' ') + beg++; end = beg; } break; @@ -417,7 +416,7 @@ xbt_dynar_t xbt_str_split_quoted(const char *s) } } free(str_to_free); - xbt_dynar_shrink(res,0); + xbt_dynar_shrink(res, 0); return res; } @@ -435,14 +434,15 @@ xbt_dynar_t xbt_str_split_quoted(const char *s) xbt_dynar_free(&d); XBT_TEST_SUITE("xbt_str", "String Handling"); -XBT_TEST_UNIT("xbt_str_split_quoted", test_split_quoted,"test the function xbt_str_split_quoted") +XBT_TEST_UNIT("xbt_str_split_quoted", test_split_quoted, "test the function xbt_str_split_quoted") { xbt_dynar_t d; char *s; mytest("Empty", "", ""); mytest("Basic test", "toto tutu", "totoXXXtutu"); - mytest("Useless backslashes", "\\t\\o\\t\\o \\t\\u\\t\\u", "totoXXXtutu"); + mytest("Useless backslashes", "\\t\\o\\t\\o \\t\\u\\t\\u", + "totoXXXtutu"); mytest("Protected space", "toto\\ tutu", "toto tutu"); mytest("Several spaces", "toto tutu", "totoXXXtutu"); mytest("LTriming", " toto tatu", "totoXXXtatu"); @@ -467,7 +467,7 @@ XBT_TEST_UNIT("xbt_str_split_quoted", test_split_quoted,"test the function xbt_s free(s); \ xbt_dynar_free(&d); -XBT_TEST_UNIT("xbt_str_split_str", test_split_str,"test the function xbt_str_split_str") +XBT_TEST_UNIT("xbt_str_split_str", test_split_str, "test the function xbt_str_split_str") { xbt_dynar_t d; char *s; @@ -478,7 +478,7 @@ XBT_TEST_UNIT("xbt_str_split_str", test_split_str,"test the function xbt_str_spl mytest_str("String with no separator in it", "toto", "##", "toto"); mytest_str("Basic test", "toto##tutu", "##", "totoXXXtutu"); } -#endif /* SIMGRID_TEST */ +#endif /* SIMGRID_TEST */ /** @brief Join a set of strings as a single string */ @@ -561,15 +561,16 @@ long getline(char **buf, size_t * n, FILE * stream) return (ssize_t) i; } -#endif /* HAVE_GETLINE */ +#endif /* HAVE_GETLINE */ /* * Diff related functions */ static xbt_matrix_t diff_build_LCS(xbt_dynar_t da, xbt_dynar_t db) { - xbt_matrix_t C = xbt_matrix_new(xbt_dynar_length(da), xbt_dynar_length(db), - sizeof(int), NULL); + xbt_matrix_t C = + xbt_matrix_new(xbt_dynar_length(da), xbt_dynar_length(db), + sizeof(int), NULL); unsigned long i, j; /* Compute the LCS */ @@ -599,13 +600,14 @@ static xbt_matrix_t diff_build_LCS(xbt_dynar_t da, xbt_dynar_t db) for (j = 1; j < xbt_dynar_length(db); j++) { if (!strcmp - (xbt_dynar_get_as(da, i, char *), xbt_dynar_get_as(db, j, char *))) - *((int *) xbt_matrix_get_ptr(C, i, j)) = - xbt_matrix_get_as(C, i - 1, j - 1, int) + 1; + (xbt_dynar_get_as(da, i, char *), + xbt_dynar_get_as(db, j, char *))) + *((int *) xbt_matrix_get_ptr(C, i, j)) = + xbt_matrix_get_as(C, i - 1, j - 1, int) + 1; else *((int *) xbt_matrix_get_ptr(C, i, j)) = - max(xbt_matrix_get_as(C, i, j - 1, int), - xbt_matrix_get_as(C, i - 1, j, int)); + max(xbt_matrix_get_as(C, i, j - 1, int), + xbt_matrix_get_as(C, i - 1, j, int)); } return C; } @@ -636,20 +638,19 @@ static void diff_build_diff(xbt_dynar_t res, xbt_dynar_push(res, &topush); } else if (j >= 0 && (i <= 0 || j == 0 - || xbt_matrix_get_as(C, i, j - 1, int) >= xbt_matrix_get_as(C, - i - - 1, - j, - int))) - { + || xbt_matrix_get_as(C, i, j - 1, + int) >= xbt_matrix_get_as(C, i - 1, j, + int))) { diff_build_diff(res, C, da, db, i, j - 1); topush = bprintf("+ %s", xbt_dynar_get_as(db, j, char *)); xbt_dynar_push(res, &topush); } else if (i >= 0 && (j <= 0 || xbt_matrix_get_as(C, i, j - 1, int) < xbt_matrix_get_as(C, - i - - 1, j, + i + - + 1, + j, int))) { diff_build_diff(res, C, da, db, i - 1, j); @@ -700,16 +701,17 @@ char *xbt_str_diff(char *a, char *b) /** @brief creates a new string containing what can be read on a fd * */ -char* xbt_str_from_file(FILE *file) { +char *xbt_str_from_file(FILE * file) +{ xbt_strbuff_t buff = xbt_strbuff_new(); char *res; char bread[1024]; - memset(bread,0,1024); + memset(bread, 0, 1024); while (!feof(file)) { int got = fread(bread, 1, 1023, file); bread[got] = '\0'; - xbt_strbuff_append(buff,bread); + xbt_strbuff_append(buff, bread); } res = buff->data;