git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/4] Add a new function, string_list_remove_duplicates()

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 9, 2012, 09:45 UTC
Message-ID
<7vfw6rsf64.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1347169990-9279-4-git-send-email-mhagger@alum.mit.edu>
Michael Haggerty <mhagger@alum.mit.edu> writes:
Show 18 quoted lines
> Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
> ---
>  Documentation/technical/api-string-list.txt |  4 ++++
>  string-list.c                               | 17 +++++++++++++++++
>  string-list.h                               |  5 +++++
>  3 files changed, 26 insertions(+)
>
> diff --git a/Documentation/technical/api-string-list.txt b/Documentation/technical/api-string-list.txt
> index 15b8072..9206f8f 100644
> --- a/Documentation/technical/api-string-list.txt
> +++ b/Documentation/technical/api-string-list.txt
> @@ -104,6 +104,10 @@ write `string_list_insert(...)->util = ...;`.
>  	Look up a given string in the string_list, returning the containing
>  	string_list_item. If the string is not found, NULL is returned.
>  
> +`string_list_remove_duplicates`::
> +
> +	Remove all but the first entry that has a given string value.
Unlike the previous patch, free_util is not documented?

It is kind of shame that the string list must be sorted for this function to work, but I guess you do not have a need for a version that works on both sorted and unsorted (yet). We can introduce a variant with "unsorted_" prefix later when it becomes necessary, so OK.

Show 54 quoted lines
>  * Functions for unsorted lists only
>  
>  `string_list_append`::
> diff --git a/string-list.c b/string-list.c
> index 72610ce..bfef6cf 100644
> --- a/string-list.c
> +++ b/string-list.c
> @@ -92,6 +92,23 @@ struct string_list_item *string_list_lookup(struct string_list *list, const char
>  	return list->items + i;
>  }
>  
> +void string_list_remove_duplicates(struct string_list *list, int free_util)
> +{
> +	if (list->nr > 1) {
> +		int src, dst;
> +		for (src = dst = 1; src < list->nr; src++) {
> +			if (!strcmp(list->items[dst - 1].string, list->items[src].string)) {
> +				if (list->strdup_strings)
> +					free(list->items[src].string);
> +				if (free_util)
> +					free(list->items[src].util);
> +			} else
> +				list->items[dst++] = list->items[src];
> +		}
> +		list->nr = dst;
> +	}
> +}
> +
>  int for_each_string_list(struct string_list *list,
>  			 string_list_each_func_t fn, void *cb_data)
>  {
> diff --git a/string-list.h b/string-list.h
> index 84996aa..c4dc659 100644
> --- a/string-list.h
> +++ b/string-list.h
> @@ -38,6 +38,7 @@ int for_each_string_list(struct string_list *list,
>  void filter_string_list(struct string_list *list, int free_util,
>  			string_list_each_func_t fn, void *cb_data);
>  
> +
>  /* Use these functions only on sorted lists: */
>  int string_list_has_string(const struct string_list *list, const char *string);
>  int string_list_find_insert_index(const struct string_list *list, const char *string,
> @@ -47,6 +48,10 @@ struct string_list_item *string_list_insert_at_index(struct string_list *list,
>  						     int insert_at, const char *string);
>  struct string_list_item *string_list_lookup(struct string_list *list, const char *string);
>  
> +/* Remove all but the first entry that has a given string value. */
> +void string_list_remove_duplicates(struct string_list *list, int free_util);
> +
> +
>  /* Use these functions only on unsorted lists: */
>  struct string_list_item *string_list_append(struct string_list *list, const char *string);
>  void sort_string_list(struct string_list *list);
Previous: Michael HaggertyNext: Michael Haggerty
Message 12 of 23 in “Add some string_list-related functions”
  1. 0/4 Add some string_list-related functionsMichael Haggerty, Sep 9, 2012
  2. 1/4 Add a new function, string_list_split_in_place()Michael Haggerty, Sep 9, 2012
  3. Junio C HamanoSep 9, 2012
  4. Michael HaggertySep 10, 2012
  5. Junio C HamanoSep 10, 2012
  6. Michael HaggertySep 10, 2012
  7. Junio C HamanoSep 10, 2012
  8. 2/4 Add a new function, filter_string_list()Michael Haggerty, Sep 9, 2012
  9. Junio C HamanoSep 9, 2012
  10. Michael HaggertySep 10, 2012
  11. 3/4 Add a new function, string_list_remove_duplicates()Michael Haggerty, Sep 9, 2012
  12. Junio C HamanoSep 9, 2012
  13. Michael HaggertySep 10, 2012
  14. 4/4 Add a function string_list_longest_prefix()Michael Haggerty, Sep 9, 2012
  15. Junio C HamanoSep 9, 2012
  16. Michael HaggertySep 10, 2012
  17. Junio C HamanoSep 10, 2012
  18. Jeff KingSep 10, 2012
  19. Andreas EricssonSep 10, 2012
  20. Using doxygen (or something similar) to generate API docs [was [PATCH 4/4] Add a function string_list_longest_prefix()]Michael Haggerty, Sep 10, 2012
  21. Jeff KingSep 10, 2012
  22. Michael HaggertySep 10, 2012
  23. Andreas EricssonSep 11, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.