00001 00002 #ifndef MICROFEED_STORE_H 00003 #define MICROFEED_STORE_H 00004 00020 typedef struct _MicrofeedStore MicrofeedStore; 00021 00025 typedef struct _MicrofeedStoreIterator MicrofeedStoreIterator; 00026 00031 typedef int (*MicrofeedStoreCompareKeysFunction)(const void* key1, const void* key2); 00032 typedef const void* (*MicrofeedStoreGetKeyFunction)(const void* item); 00033 typedef void (*MicrofeedStoreForeachFunction)(void* data, void* user_data); 00034 typedef int (*MicrofeedStoreCompareDatasFunction)(const void* data1, const void* data2, unsigned int index1, unsigned int index2, void* user_data); 00035 typedef void (*MicrofeedStoreFreeDataFunction)(void* data); 00036 00037 MicrofeedStore* microfeed_store_new_sorted(MicrofeedStoreCompareKeysFunction compare_keys, MicrofeedStoreGetKeyFunction get_key); 00038 MicrofeedStore* microfeed_store_new_unsorted(MicrofeedStoreCompareKeysFunction compare_keys, MicrofeedStoreGetKeyFunction get_key); 00039 void microfeed_store_free(MicrofeedStore* store); 00040 00041 int microfeed_store_is_sorted(MicrofeedStore* store); 00042 void microfeed_store_foreach(MicrofeedStore* store, MicrofeedStoreForeachFunction foreach, void* user_data); 00043 #define microfeed_store_get(s, k, t) ((t*)microfeed_store_get_impl(s, k)) 00044 void* microfeed_store_get_impl(MicrofeedStore* store, const void* key); 00045 #define microfeed_store_get_index(s, i, t) ((t*)microfeed_store_get_index_impl(s, i)) 00046 void* microfeed_store_get_index_impl(MicrofeedStore* store, unsigned int index); 00047 unsigned int microfeed_store_get_size(MicrofeedStore* store); 00048 int microfeed_store_insert(MicrofeedStore* store, void* data); 00049 #define microfeed_store_replace(s, d, t) ((t*)microfeed_store_replace_impl(s, d)) 00050 void* microfeed_store_replace_impl(MicrofeedStore* store, void* data); 00051 int microfeed_store_remove(MicrofeedStore* store, const void* data); 00052 #define microfeed_store_remove_key(s, k, t) ((t*)microfeed_store_remove_key_impl(s, k)) 00053 void* microfeed_store_remove_key_impl(MicrofeedStore* store, const void* key); 00054 #define microfeed_store_remove_index(s, i, t) ((t*)microfeed_store_remove_index_impl(s, i)) 00055 void* microfeed_store_remove_index_impl(MicrofeedStore* store, unsigned int index); 00056 void microfeed_store_remove_and_free_all(MicrofeedStore* store, MicrofeedStoreFreeDataFunction free_data); 00057 MicrofeedStoreIterator* microfeed_store_iterate(MicrofeedStore* store, const void* start_key); 00058 void microfeed_store_sort(MicrofeedStore* store, MicrofeedStoreCompareDatasFunction compare_datas, void* user_data); 00059 00060 void microfeed_store_iterator_free(MicrofeedStoreIterator* iterator); 00061 void* microfeed_store_iterator_get_impl(MicrofeedStoreIterator* iterator); 00062 #define microfeed_store_iterator_get(i, t) ((t*)microfeed_store_iterator_get_impl(i)) 00063 void microfeed_store_iterator_next(MicrofeedStoreIterator* iterator); 00064 00065 int microfeed_store_compare_keys_direct(const void* key1, const void* key2); 00066 const void* microfeed_store_get_key_direct(const void* data); 00067 00073 #endif