You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					159 lines
				
				6.1 KiB
			
		
		
			
		
	
	
					159 lines
				
				6.1 KiB
			| 
								 
											7 years ago
										 
									 | 
							
								/*  =========================================================================
							 | 
						||
| 
								 | 
							
								    zlist - simple generic list container
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Copyright (c) the Contributors as noted in the AUTHORS file.
							 | 
						||
| 
								 | 
							
								    This file is part of CZMQ, the high-level C binding for 0MQ:
							 | 
						||
| 
								 | 
							
								    http://czmq.zeromq.org.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    This Source Code Form is subject to the terms of the Mozilla Public
							 | 
						||
| 
								 | 
							
								    License, v. 2.0. If a copy of the MPL was not distributed with this
							 | 
						||
| 
								 | 
							
								    file, You can obtain one at http://mozilla.org/MPL/2.0/.
							 | 
						||
| 
								 | 
							
								    =========================================================================
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __ZLIST_H_INCLUDED__
							 | 
						||
| 
								 | 
							
								#define __ZLIST_H_INCLUDED__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  @warning THE FOLLOWING @INTERFACE BLOCK IS AUTO-GENERATED BY ZPROJECT
							 | 
						||
| 
								 | 
							
								//  @warning Please edit the model at "api/zlist.api" to make changes.
							 | 
						||
| 
								 | 
							
								//  @interface
							 | 
						||
| 
								 | 
							
								//  This is a stable class, and may not change except for emergencies. It
							 | 
						||
| 
								 | 
							
								//  is provided in stable builds.
							 | 
						||
| 
								 | 
							
								// Comparison function e.g. for sorting and removing.
							 | 
						||
| 
								 | 
							
								typedef int (zlist_compare_fn) (
							 | 
						||
| 
								 | 
							
								    void *item1, void *item2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Callback function for zlist_freefn method
							 | 
						||
| 
								 | 
							
								typedef void (zlist_free_fn) (
							 | 
						||
| 
								 | 
							
								    void *data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Create a new list container
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT zlist_t *
							 | 
						||
| 
								 | 
							
								    zlist_new (void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Destroy a list container
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void
							 | 
						||
| 
								 | 
							
								    zlist_destroy (zlist_t **self_p);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Return the item at the head of list. If the list is empty, returns NULL.
							 | 
						||
| 
								 | 
							
								//  Leaves cursor pointing at the head item, or NULL if the list is empty.  
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void *
							 | 
						||
| 
								 | 
							
								    zlist_first (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Return the next item. If the list is empty, returns NULL. To move to
							 | 
						||
| 
								 | 
							
								//  the start of the list call zlist_first (). Advances the cursor.     
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void *
							 | 
						||
| 
								 | 
							
								    zlist_next (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Return the item at the tail of list. If the list is empty, returns NULL.
							 | 
						||
| 
								 | 
							
								//  Leaves cursor pointing at the tail item, or NULL if the list is empty.  
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void *
							 | 
						||
| 
								 | 
							
								    zlist_last (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Return first item in the list, or null, leaves the cursor
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void *
							 | 
						||
| 
								 | 
							
								    zlist_head (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Return last item in the list, or null, leaves the cursor
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void *
							 | 
						||
| 
								 | 
							
								    zlist_tail (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Return the current item of list. If the list is empty, returns NULL.     
							 | 
						||
| 
								 | 
							
								//  Leaves cursor pointing at the current item, or NULL if the list is empty.
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void *
							 | 
						||
| 
								 | 
							
								    zlist_item (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Append an item to the end of the list, return 0 if OK or -1 if this  
							 | 
						||
| 
								 | 
							
								//  failed for some reason (out of memory). Note that if a duplicator has
							 | 
						||
| 
								 | 
							
								//  been set, this method will also duplicate the item.                  
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT int
							 | 
						||
| 
								 | 
							
								    zlist_append (zlist_t *self, void *item);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Push an item to the start of the list, return 0 if OK or -1 if this  
							 | 
						||
| 
								 | 
							
								//  failed for some reason (out of memory). Note that if a duplicator has
							 | 
						||
| 
								 | 
							
								//  been set, this method will also duplicate the item.                  
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT int
							 | 
						||
| 
								 | 
							
								    zlist_push (zlist_t *self, void *item);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Pop the item off the start of the list, if any
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void *
							 | 
						||
| 
								 | 
							
								    zlist_pop (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Checks if an item already is present. Uses compare method to determine if 
							 | 
						||
| 
								 | 
							
								//  items are equal. If the compare method is NULL the check will only compare
							 | 
						||
| 
								 | 
							
								//  pointers. Returns true if item is present else false.                     
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT bool
							 | 
						||
| 
								 | 
							
								    zlist_exists (zlist_t *self, void *item);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Remove the specified item from the list if present
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void
							 | 
						||
| 
								 | 
							
								    zlist_remove (zlist_t *self, void *item);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Make a copy of list. If the list has autofree set, the copied list will  
							 | 
						||
| 
								 | 
							
								//  duplicate all items, which must be strings. Otherwise, the list will hold
							 | 
						||
| 
								 | 
							
								//  pointers back to the items in the original list. If list is null, returns
							 | 
						||
| 
								 | 
							
								//  NULL.                                                                    
							 | 
						||
| 
								 | 
							
								//  Caller owns return value and must destroy it when done.
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT zlist_t *
							 | 
						||
| 
								 | 
							
								    zlist_dup (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Purge all items from list
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void
							 | 
						||
| 
								 | 
							
								    zlist_purge (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Return number of items in the list
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT size_t
							 | 
						||
| 
								 | 
							
								    zlist_size (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Sort the list. If the compare function is null, sorts the list by     
							 | 
						||
| 
								 | 
							
								//  ascending key value using a straight ASCII comparison. If you specify 
							 | 
						||
| 
								 | 
							
								//  a compare function, this decides how items are sorted. The sort is not
							 | 
						||
| 
								 | 
							
								//  stable, so may reorder items with the same keys. The algorithm used is
							 | 
						||
| 
								 | 
							
								//  combsort, a compromise between performance and simplicity.            
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void
							 | 
						||
| 
								 | 
							
								    zlist_sort (zlist_t *self, zlist_compare_fn compare);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Set list for automatic item destruction; item values MUST be strings. 
							 | 
						||
| 
								 | 
							
								//  By default a list item refers to a value held elsewhere. When you set 
							 | 
						||
| 
								 | 
							
								//  this, each time you append or push a list item, zlist will take a copy
							 | 
						||
| 
								 | 
							
								//  of the string value. Then, when you destroy the list, it will free all
							 | 
						||
| 
								 | 
							
								//  item values automatically. If you use any other technique to allocate 
							 | 
						||
| 
								 | 
							
								//  list values, you must free them explicitly before destroying the list.
							 | 
						||
| 
								 | 
							
								//  The usual technique is to pop list items and destroy them, until the  
							 | 
						||
| 
								 | 
							
								//  list is empty.                                                        
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void
							 | 
						||
| 
								 | 
							
								    zlist_autofree (zlist_t *self);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Sets a compare function for this list. The function compares two items.
							 | 
						||
| 
								 | 
							
								//  It returns an integer less than, equal to, or greater than zero if the 
							 | 
						||
| 
								 | 
							
								//  first item is found, respectively, to be less than, to match, or be    
							 | 
						||
| 
								 | 
							
								//  greater than the second item.                                          
							 | 
						||
| 
								 | 
							
								//  This function is used for sorting, removal and exists checking.        
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void
							 | 
						||
| 
								 | 
							
								    zlist_comparefn (zlist_t *self, zlist_compare_fn fn);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Set a free function for the specified list item. When the item is     
							 | 
						||
| 
								 | 
							
								//  destroyed, the free function, if any, is called on that item.         
							 | 
						||
| 
								 | 
							
								//  Use this when list items are dynamically allocated, to ensure that    
							 | 
						||
| 
								 | 
							
								//  you don't have memory leaks. You can pass 'free' or NULL as a free_fn.
							 | 
						||
| 
								 | 
							
								//  Returns the item, or NULL if there is no such item.                   
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void *
							 | 
						||
| 
								 | 
							
								    zlist_freefn (zlist_t *self, void *item, zlist_free_fn fn, bool at_tail);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  Self test of this class.
							 | 
						||
| 
								 | 
							
								CZMQ_EXPORT void
							 | 
						||
| 
								 | 
							
								    zlist_test (bool verbose);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  @end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |