 5062f9e1b5
			
		
	
	5062f9e1b5
	
	
	
		
			
			The documentation for the ALLOC_GROW API implicitly encouraged developers to use "ary" as the variable name for the array which is dynamically grown. However "ary" is an unusual abbreviation hardly used anywhere else in the source tree, and it is also better to name variables based on their contents not on their type. Signed-off-by: Adam Spiers <git@adamspiers.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			37 lines
		
	
	
		
			1019 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1019 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| allocation growing API
 | |
| ======================
 | |
| 
 | |
| Dynamically growing an array using realloc() is error prone and boring.
 | |
| 
 | |
| Define your array with:
 | |
| 
 | |
| * a pointer (`item`) that points at the array, initialized to `NULL`
 | |
|   (although please name the variable based on its contents, not on its
 | |
|   type);
 | |
| 
 | |
| * an integer variable (`alloc`) that keeps track of how big the current
 | |
|   allocation is, initialized to `0`;
 | |
| 
 | |
| * another integer variable (`nr`) to keep track of how many elements the
 | |
|   array currently has, initialized to `0`.
 | |
| 
 | |
| Then before adding `n`th element to the item, call `ALLOC_GROW(item, n,
 | |
| alloc)`.  This ensures that the array can hold at least `n` elements by
 | |
| calling `realloc(3)` and adjusting `alloc` variable.
 | |
| 
 | |
| ------------
 | |
| sometype *item;
 | |
| size_t nr;
 | |
| size_t alloc
 | |
| 
 | |
| for (i = 0; i < nr; i++)
 | |
| 	if (we like item[i] already)
 | |
| 		return;
 | |
| 
 | |
| /* we did not like any existing one, so add one */
 | |
| ALLOC_GROW(item, nr + 1, alloc);
 | |
| item[nr++] = value you like;
 | |
| ------------
 | |
| 
 | |
| You are responsible for updating the `nr` variable.
 |