Evolution API Reference: libedataserver, utility library | ||||
---|---|---|---|---|
EDListNode; EDList; #define E_DLIST_INITIALISER (l) void e_dlist_init (EDList *v); EDListNode* e_dlist_addhead (EDList *l, EDListNode *n); EDListNode* e_dlist_addtail (EDList *l, EDListNode *n); EDListNode* e_dlist_remove (EDListNode *n); EDListNode* e_dlist_remhead (EDList *l); EDListNode* e_dlist_remtail (EDList *l); int e_dlist_empty (EDList *l); int e_dlist_length (EDList *l); EMCache; EMCacheNode; EMCache* em_cache_new (time_t timeout, size_t nodesize, GFreeFunc nodefree); void em_cache_destroy (EMCache *emc); EMCacheNode* em_cache_lookup (EMCache *emc, const char *key); EMCacheNode* em_cache_node_new (EMCache *emc, const char *key); void em_cache_node_unref (EMCache *emc, EMCacheNode *n); void em_cache_add (EMCache *emc, EMCacheNode *n); void em_cache_clear (EMCache *emc); EMsgPort; EMsg; EMsgPort* e_msgport_new (void); void e_msgport_destroy (EMsgPort *mp); int e_msgport_fd (EMsgPort *mp); void e_msgport_put (EMsgPort *mp, EMsg *msg); EMsg* e_msgport_wait (EMsgPort *mp); EMsg* e_msgport_get (EMsgPort *mp); void e_msgport_reply (EMsg *msg); void (*EThreadFunc) (EThread *, EMsg *, void *data); EThread* e_thread_new (e_thread_t type); void e_thread_destroy (EThread *e); void e_thread_set_queue_limit (EThread *e, int limit); void e_thread_set_msg_lost (EThread *e, EThreadFunc destroy, void *data); void e_thread_set_msg_destroy (EThread *e, EThreadFunc destroy, void *data); void e_thread_set_reply_port (EThread *e, EMsgPort *reply_port); void e_thread_set_msg_received (EThread *e, EThreadFunc received, void *data); void e_thread_put (EThread *e, EMsg *msg); int e_thread_busy (EThread *e); EMutex; enum e_mutex_t; EMutex* e_mutex_new (e_mutex_t type); int e_mutex_destroy (EMutex *m); int e_mutex_lock (EMutex *m); int e_mutex_unlock (EMutex *m); void e_mutex_assert_locked (EMutex *m); int e_mutex_cond_wait (void *cond, EMutex *m);
typedef struct { struct _EDListNode *head; struct _EDListNode *tail; struct _EDListNode *tailpred; } EDList;
#define E_DLIST_INITIALISER(l) { (EDListNode *)&l.tail, NULL, (EDListNode *)&l.head }
l : |
typedef struct { struct _EMCacheNode *next, *prev; char *key; int ref_count; time_t stamp; } EMCacheNode;
EMCache* em_cache_new (time_t timeout, size_t nodesize, GFreeFunc nodefree);
Setup a new timeout cache. nodesize
is the size of nodes in the
cache, and nodefree
will be called to free YOUR content.
timeout : |
|
nodesize : |
|
nodefree : |
|
Returns : |
EMCacheNode* em_cache_lookup (EMCache *emc, const char *key);
Lookup a cache node. once you're finished with it, you need to unref it.
emc : |
|
key : |
|
Returns : |
EMCacheNode* em_cache_node_new (EMCache *emc, const char *key);
Create a new key'd cache node. The node will not be added to the cache until you insert it.
emc : |
|
key : |
|
Returns : |
void em_cache_node_unref (EMCache *emc, EMCacheNode *n);
unref a cache node, you can only unref nodes which have been looked up.
emc : |
|
n : |
void em_cache_add (EMCache *emc, EMCacheNode *n);
Add a cache node to the cache, once added the memory is owned by the cache. If there are conflicts and the old node is still in use, then the new node is not added, otherwise it is added and any nodes older than the expire time are flushed.
emc : |
|
n : |
void em_cache_clear (EMCache *emc);
clear the cache. just for api completeness.
emc : |
void e_thread_set_msg_lost (EThread *e, EThreadFunc destroy, void *data);
e : |
|
destroy : |
|
data : |
void e_thread_set_msg_destroy (EThread *e, EThreadFunc destroy, void *data);
e : |
|
destroy : |
|
data : |
void e_thread_set_reply_port (EThread *e, EMsgPort *reply_port);
e : |
|
reply_port : |
void e_thread_set_msg_received (EThread *e, EThreadFunc received, void *data);
e : |
|
received : |
|
data : |
typedef enum _e_mutex_t { E_MUTEX_SIMPLE, /* == pthread_mutex */ E_MUTEX_REC, /* recursive mutex */ } e_mutex_t;