1 #include "msg_mailbox.h"
\r
2 #include "msg/private.h"
\r
5 msg_mailboxes = NULL;
\r
8 MSG_get_mailboxes(void)
\r
10 return msg_mailboxes;
\r
14 MSG_mailbox_mod_init(void)
\r
16 msg_mailboxes = xbt_dict_new();
\r
20 MSG_mailbox_mod_exit(void)
\r
22 xbt_dict_free(&msg_mailboxes);
\r
26 MSG_mailbox_new(const char *alias)
\r
28 msg_mailbox_t mailbox = xbt_new0(s_msg_mailbox_t,1);
\r
30 mailbox->tasks = xbt_fifo_new();
\r
31 mailbox->cond = NULL;
\r
32 mailbox->alias = xbt_strdup(alias);
\r
33 mailbox->hostname = NULL;
\r
35 /* add the mbox in the dictionary */
\r
36 xbt_dict_set(msg_mailboxes, alias, mailbox, MSG_mailbox_free);
\r
42 MSG_mailbox_destroy(msg_mailbox_t* mailbox)
\r
44 xbt_dict_remove(msg_mailboxes,(*mailbox)->alias);
\r
46 if(NULL != ((*mailbox)->hostname))
\r
47 free((*mailbox)->hostname);
\r
50 free((*mailbox)->alias);
\r
58 MSG_mailbox_put(msg_mailbox_t mailbox, m_task_t task)
\r
60 xbt_fifo_push(mailbox->tasks, task);
\r
64 MSG_mailbox_get_cond(msg_mailbox_t mailbox)
\r
66 return mailbox->cond;
\r
70 MSG_mailbox_remove(msg_mailbox_t mailbox, m_task_t task)
\r
72 xbt_fifo_remove(mailbox->tasks,task);
\r
76 MSG_mailbox_is_empty(msg_mailbox_t mailbox)
\r
78 return (NULL == xbt_fifo_get_first_item(mailbox->tasks));
\r
82 MSG_mailbox_pop_head(msg_mailbox_t mailbox)
\r
84 return (m_task_t)xbt_fifo_shift(mailbox->tasks);
\r
88 MSG_mailbox_get_head(msg_mailbox_t mailbox)
\r
90 xbt_fifo_item_t item;
\r
92 if(NULL == (item = xbt_fifo_get_first_item(mailbox->tasks)))
\r
95 return (m_task_t)xbt_fifo_get_item_content(item);
\r
99 MSG_mailbox_get_first_host_task(msg_mailbox_t mailbox, m_host_t host)
\r
101 m_task_t task = NULL;
\r
102 xbt_fifo_item_t item = NULL;
\r
104 xbt_fifo_foreach(mailbox->tasks, item, task, m_task_t)
\r
106 if (task->simdata->source == host)
\r
111 xbt_fifo_remove_item(mailbox->tasks, item);
\r
117 MSG_mailbox_get_count_host_tasks(msg_mailbox_t mailbox, m_host_t host)
\r
119 m_task_t task = NULL;
\r
120 xbt_fifo_item_t item = NULL;
\r
123 xbt_fifo_foreach(mailbox->tasks, item, task, m_task_t)
\r
125 if (task->simdata->source == host)
\r
133 MSG_mailbox_set_cond(msg_mailbox_t mailbox, smx_cond_t cond)
\r
135 mailbox->cond = cond;
\r
139 MSG_mailbox_get_alias(msg_mailbox_t mailbox)
\r
141 return mailbox->alias;
\r
145 MSG_mailbox_get_hostname(msg_mailbox_t mailbox)
\r
147 return mailbox->hostname;
\r
151 MSG_mailbox_set_hostname(msg_mailbox_t mailbox, const char* hostname)
\r
153 mailbox->hostname = xbt_strdup(hostname);
\r
157 MSG_mailbox_free(void* mailbox)
\r
159 msg_mailbox_t __mailbox = (msg_mailbox_t)mailbox;
\r
161 if(NULL != (__mailbox->hostname))
\r
162 free(__mailbox->hostname);
\r
164 free(__mailbox->alias);
\r
170 MSG_mailbox_get_by_alias(const char* alias)
\r
173 msg_mailbox_t mailbox = xbt_dict_get_or_null(msg_mailboxes,alias);
\r
177 mailbox = MSG_mailbox_new(alias);
\r
178 MSG_mailbox_set_hostname(mailbox,MSG_host_self()->name);
\r