@matheusbsbs / matheus-bagliano / commits / 9b864e730b
Fork 0

add strbuf_expand_dict_cb(), a helper for simple cases

The new callback function strbuf_expand_dict_cb() can be used together with strbuf_expand() if there is only a small number of placeholders for static replacement texts. It expects its dictionary as an array of placeholder+value pairs as context parameter, terminated by an entry with the placeholder member set to NULL. The new helper is intended to aid converting the remaining calls of interpolate(). strbuf_expand() is smaller, more flexible and can be used to go faster than interpolate(), so it should replace the latter. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>

René Scharfe committed Nov 23, 2008 at 00:09 UTC 9b864e730bda0e028a85387fa568429724582f22
3 files changed +28
Documentation/technical/api-strbuf.txt
+7
@@ -205,6 +205,13 @@ In order to facilitate caching and to make it possible to give
205 parameters to the callback, `strbuf_expand()` passes a context pointer,
206 which can be used by the programmer of the callback as she sees fit.
207
208 +`strbuf_expand_dict_cb`::
209 +
210 + Used as callback for `strbuf_expand()`, expects an array of
211 + struct strbuf_expand_dict_entry as context, i.e. pairs of
212 + placeholder and replacement string. The array needs to be
213 + terminated by an entry with placeholder set to NULL.
214 +
215 `strbuf_addf`::
216
217 Add a formatted string to the buffer.
strbuf.c
+16
@@ -237,6 +237,22 @@ void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
237 }
238 }
239
240 +size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder,
241 + void *context)
242 +{
243 + struct strbuf_expand_dict_entry *e = context;
244 + size_t len;
245 +
246 + for (; e->placeholder && (len = strlen(e->placeholder)); e++) {
247 + if (!strncmp(placeholder, e->placeholder, len)) {
248 + if (e->value)
249 + strbuf_addstr(sb, e->value);
250 + return len;
251 + }
252 + }
253 + return 0;
254 +}
255 +
256 size_t strbuf_fread(struct strbuf *sb, size_t size, FILE *f)
257 {
258 size_t res;
strbuf.h
+5
@@ -111,6 +111,11 @@ extern void strbuf_adddup(struct strbuf *sb, size_t pos, size_t len);
111
112 typedef size_t (*expand_fn_t) (struct strbuf *sb, const char *placeholder, void *context);
113 extern void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn, void *context);
114 +struct strbuf_expand_dict_entry {
115 + const char *placeholder;
116 + const char *value;
117 +};
118 +extern size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder, void *context);
119
120 __attribute__((format(printf,2,3)))
121 extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);