/*************************************************************************** * * 通用代码 * Map implements * * HashMap * TreeMap * * Author : Li Bo Feng * * Update History * DATE OWNER DESCRIPTION * ----------- ------------ ----------- * 2010-01-19 Li Bo Feng Generated * ***************************************************************************/ #ifndef _AB_MAP_H_ #define _AB_MAP_H_ /** * 内存分配和释放 */ #define MALLOC(n) mc_malloc(n, __FILE__, __LINE__) #define FREE(p) mc_free(p, __FILE__, __LINE__) typedef void (*mc_print_function)(long mtc, char *info, char* file, int line); extern mc_print_function mc_print; void* mc_malloc(int n, char* file, int line); void mc_free(void* p, char* file, int line); /** * Map Entry */ typedef struct _map_entry { int entry_size; char* key; void* value; int copy_value_length; // 0 for use value point directly. char value_type; // Long String Double Bytes Map Pointer struct _map_entry* prev; struct _map_entry* next; }*MapEntry; long new_mapping(); long new_sorted_mapping(); void put_mapping(long mapid, char* key, void* value, int copy_value_length); void* get_mapping(long mapid, char* key); void* remove_mapping(long mapid, char* key); void delete_mapping(long mapid); void clear_mapping(); MapEntry items_mapping(long mapid); int size_mapping(long mapid); /* return item equal or less than special key in sorted mapping */ MapEntry nearby_item_sorted_mapping(long mapid, char* key); void put_all_mapping(long destmap, long srcmap); /* return mapping string, unsupport multi call in sametime */ char* string_mapping(long mapid); void put_string_mapping(long mapid, char* key, char* value); void put_submap_mapping(long mapid, char* key, long value); void put_long_mapping(long mapid, char* key, long value); void put_double_mapping(long mapid, char* key, double value); char* get_string_mapping(long mapid, char* key); long get_submap_mapping(long mapid, char* key); long get_long_mapping(long mapid, char* key); double get_double_mapping(long mapid, char* key); typedef int (*event_map_entry)(long, char*, void*); event_map_entry get_event(long mapid, int event); event_map_entry set_event(long mapid, int event, event_map_entry); #endif