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

[PATCH v2 2/8] alloc: write out allocator definitions

From
Jeff King <peff@peff.net>
Date
Jul 13, 2014, 06:41 UTC
Message-ID
<20140713064150.GB4852@sigill.intra.peff.net>
In-Reply-To
<20140713064116.GA4768@sigill.intra.peff.net>

Because the allocator functions for tree, blobs, etc are all very similar, we originally used a macro to avoid repeating ourselves. Since the prior commit, though, the heavy lifting is done by an inline helper function. The macro does still save us a few lines, but at some readability cost. It obfuscates the function definitions (and makes them hard to find via grep).

Much worse, though, is the fact that it isn't used consistently for all allocators. Somebody coming later may be tempted to modify DEFINE_ALLOCATOR, but they would miss alloc_commit_node, which is treated specially.

Let's just drop the macro and write everything out explicitly.

Signed-off-by: Jeff King <peff@peff.net>
---
 alloc.c | 38 +++++++++++++++++++++++++++-----------
 1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/alloc.c b/alloc.c
index d7c3605..03e458b 100644
--- a/alloc.c
+++ b/alloc.c
@@ -18,13 +18,6 @@
 
 #define BLOCKING 1024
 
-#define DEFINE_ALLOCATOR(name, type)				\
-static struct alloc_state name##_state;				\
-void *alloc_##name##_node(void)					\
-{								\
-	return alloc_node(&name##_state, sizeof(type));		\
-}
-
 union any_object {
 	struct object object;
 	struct blob blob;
@@ -55,10 +48,33 @@ static inline void *alloc_node(struct alloc_state *s, size_t node_size)
 	return ret;
 }
 
-DEFINE_ALLOCATOR(blob, struct blob)
-DEFINE_ALLOCATOR(tree, struct tree)
-DEFINE_ALLOCATOR(tag, struct tag)
-DEFINE_ALLOCATOR(object, union any_object)
+static struct alloc_state blob_state;
+void *alloc_blob_node(void)
+{
+	struct blob *b = alloc_node(&blob_state, sizeof(struct blob));
+	return b;
+}
+
+static struct alloc_state tree_state;
+void *alloc_tree_node(void)
+{
+	struct tree *t = alloc_node(&tree_state, sizeof(struct tree));
+	return t;
+}
+
+static struct alloc_state tag_state;
+void *alloc_tag_node(void)
+{
+	struct tag *t = alloc_node(&tag_state, sizeof(struct tag));
+	return t;
+}
+
+static struct alloc_state object_state;
+void *alloc_object_node(void)
+{
+	struct object *obj = alloc_node(&object_state, sizeof(union any_object));
+	return obj;
+}
 
 static struct alloc_state commit_state;
 
-- 
2.0.0.566.gfe3e6b2
Previous: Junio C HamanoNext: Junio C Hamano
Message 14 of 35 in “alloc.c: remove the redundant commit_count variable”
  1. 2/2 alloc.c: remove the redundant commit_count variableRamsay Jones, Jul 10, 2014
  2. Jeff KingJul 11, 2014
  3. Ramsay JonesJul 11, 2014
  4. Jeff KingJul 11, 2014
  5. Ramsay JonesJul 11, 2014
  6. 0/7 ensure index is set for all OBJ_COMMIT objects variableJeff King, Jul 11, 2014
  7. 1/7 alloc.c: remove the alloc_raw_commit_node() functionJeff King, Jul 11, 2014
  8. 2/7 move setting of object->type to alloc_* functionsJeff King, Jul 11, 2014
  9. Ramsay JonesJul 12, 2014
  10. Jeff KingJul 12, 2014
  11. Jeff KingJul 13, 2014
  12. 1/8 alloc.c: remove the alloc_raw_commit_node() functionJeff King, Jul 13, 2014
  13. Junio C HamanoJul 15, 2014
  14. 2/8 alloc: write out allocator definitionsJeff King, Jul 13, 2014
  15. Junio C HamanoJul 15, 2014
  16. 3/8 move setting of object->type to alloc_* functionsJeff King, Jul 13, 2014
  17. Junio C HamanoJul 15, 2014
  18. 4/8 parse_object_buffer: do not set object typeJeff King, Jul 13, 2014
  19. 5/8 add object_as_type helper for casting objectsJeff King, Jul 13, 2014
  20. 6/8 alloc: factor out commit indexJeff King, Jul 13, 2014
  21. 7/8 object_as_type: set commit indexJeff King, Jul 13, 2014
  22. 8/8 diff-tree: avoid lookup_unknown_objectJeff King, Jul 13, 2014
  23. Ramsay JonesJul 13, 2014
  24. Jeff KingJul 14, 2014
  25. Ramsay JonesJul 14, 2014
  26. Ramsay JonesJul 12, 2014
  27. Jeff KingJul 12, 2014
  28. 3/7 parse_object_buffer: do not set object typeJeff King, Jul 11, 2014
  29. 4/7 add object_as_type helper for casting objectsJeff King, Jul 11, 2014
  30. Ramsay JonesJul 11, 2014
  31. Jeff KingJul 11, 2014
  32. 5/7 alloc: factor out commit indexJeff King, Jul 11, 2014
  33. 6/7 object_as_type: set commit indexJeff King, Jul 11, 2014
  34. 7/7 diff-tree: avoid lookup_unknown_objectJeff King, Jul 11, 2014
  35. Ramsay JonesJul 11, 2014

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.