git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
5d9dd3ef58a1854050f838e7acb5cd90e95892e5 blob 3117 bytes (raw)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
 
#ifndef STRMAP_H
#define STRMAP_H

#include "hashmap.h"
#include "string-list.h"

struct strmap {
	struct hashmap map;
	unsigned int strdup_strings:1;
};

struct str_entry {
	struct hashmap_entry ent;
	struct string_list_item item;
};

/*
 * Initialize the members of the strmap, set `strdup_strings`
 * member according to the value of the second parameter.
 */
void strmap_init(struct strmap *map, int strdup_strings);

/*
 * Remove all entries from the map, releasing any allocated resources.
 */
void strmap_free(struct strmap *map, int free_values);

/*
 * Same as calling strmap_free() followed by strmap_init().
 */
void strmap_clear(struct strmap *map, int free_values);

/*
 * Insert "str" into the map, pointing to "data".
 *
 * If an entry for "str" already exists, its data pointer is overwritten, and
 * the original data pointer returned. Otherwise, returns NULL.
 */
void *strmap_put(struct strmap *map, const char *str, void *data);

/*
 * Return the string_list_item mapped by "str", or NULL if there is not such
 * an item in map.
 */
struct string_list_item *strmap_get_item(struct strmap *map, const char *str);

/*
 * Return the data pointer mapped by "str", or NULL if the entry does not
 * exist.
 */
void *strmap_get(struct strmap *map, const char *str);

/*
 * Return non-zero iff "str" is present in the map. This differs from
 * strmap_get() in that it can distinguish entries with a NULL data pointer.
 */
int strmap_contains(struct strmap *map, const char *str);

/*
 * Remove the given entry from the strmap.  If the string isn't in the
 * strmap, the map is not altered.
 */
void strmap_remove(struct strmap *map, const char *str, int free_value);

/*
 * Return whether the strmap is empty.
 */
static inline int strmap_empty(struct strmap *map)
{
	return hashmap_get_size(&map->map) == 0;
}

/*
 * Return how many entries the strmap has.
 */
static inline unsigned int strmap_get_size(struct strmap *map)
{
	return hashmap_get_size(&map->map);
}

/*
 * iterate through @map using @iter, @var is a pointer to a type str_entry
 */
#define strmap_for_each_entry(mystrmap, iter, var)	\
	for (var = hashmap_iter_first_entry_offset(&(mystrmap)->map, iter, \
						   OFFSETOF_VAR(var, ent)); \
		var; \
		var = hashmap_iter_next_entry_offset(iter, \
						OFFSETOF_VAR(var, ent)))

/*
 * Helper functions for using strmap as map of string -> int, using the void*
 * field to store the int instead of allocating an int and having the void*
 * member point to the allocated int.
 */

static inline int strintmap_get(struct strmap *map, const char *str,
				int default_value)
{
	struct string_list_item *result = strmap_get_item(map, str);
	if (!result)
		return default_value;
	return (intptr_t)result->util;
}

static inline void strintmap_set(struct strmap *map, const char *str, intptr_t v)
{
	strmap_put(map, str, (void *)v);
}

void strintmap_incr(struct strmap *map, const char *str, intptr_t amt);

static inline void strintmap_clear(struct strmap *map)
{
	strmap_clear(map, 0);
}

static inline void strintmap_free(struct strmap *map)
{
	strmap_free(map, 0);
}

#endif /* STRMAP_H */
debug log:

solving 5d9dd3ef58 ...
found 5d9dd3ef58 in https://public-inbox.org/git/418975b46039f63476852a868ca6221244b5d88e.1598035949.git.gitgitgadget@gmail.com/
found 28a98c5a4b in https://public-inbox.org/git/b3095d97d8ee9d6576292731cc100492e7c64f13.1598035949.git.gitgitgadget@gmail.com/
found 45d0a4f714 in https://public-inbox.org/git/5bda171d0c1562573800d4bcbfac4799f01d9c20.1598035949.git.gitgitgadget@gmail.com/
found eb5807f6fa in https://public-inbox.org/git/a86fd5fdcc47baf85046eb07257f4db9f9498084.1598035949.git.gitgitgadget@gmail.com/

applying [1/4] https://public-inbox.org/git/a86fd5fdcc47baf85046eb07257f4db9f9498084.1598035949.git.gitgitgadget@gmail.com/
diff --git a/strmap.h b/strmap.h
new file mode 100644
index 0000000000..eb5807f6fa


applying [2/4] https://public-inbox.org/git/5bda171d0c1562573800d4bcbfac4799f01d9c20.1598035949.git.gitgitgadget@gmail.com/
diff --git a/strmap.h b/strmap.h
index eb5807f6fa..45d0a4f714 100644


applying [3/4] https://public-inbox.org/git/b3095d97d8ee9d6576292731cc100492e7c64f13.1598035949.git.gitgitgadget@gmail.com/
diff --git a/strmap.h b/strmap.h
index 45d0a4f714..28a98c5a4b 100644


applying [4/4] https://public-inbox.org/git/418975b46039f63476852a868ca6221244b5d88e.1598035949.git.gitgitgadget@gmail.com/
diff --git a/strmap.h b/strmap.h
index 28a98c5a4b..5d9dd3ef58 100644

Checking patch strmap.h...
Applied patch strmap.h cleanly.
Checking patch strmap.h...
Applied patch strmap.h cleanly.
Checking patch strmap.h...
Applied patch strmap.h cleanly.
Checking patch strmap.h...
Applied patch strmap.h cleanly.

index at:
100644 5d9dd3ef58a1854050f838e7acb5cd90e95892e5	strmap.h

git@vger.kernel.org list mirror (unofficial, one of many)

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://public-inbox.org/git
	git clone --mirror http://ou63pmih66umazou.onion/git
	git clone --mirror http://czquwvybam4bgbro.onion/git
	git clone --mirror http://hjrcffqmbrq6wope.onion/git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 git git/ https://public-inbox.org/git \
		git@vger.kernel.org
	public-inbox-index git

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.version-control.git
	nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.version-control.git
	nntp://ie5yzdi7fg72h7s4sdcztq5evakq23rdt33mfyfcddc5u3ndnw24ogqd.onion/inbox.comp.version-control.git
	nntp://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/inbox.comp.version-control.git
	nntp://news.gmane.io/gmane.comp.version-control.git
 note: .onion URLs require Tor: https://www.torproject.org/

code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git