Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
02104c2aaf6d2ee23ddef10c61cb83b939c3216f
[simgrid.git] / src / surf / model.c
1
2 /* Copyright (c) 2009 The SimGrid Team. All rights reserved.                */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #include "surf_private.h"
8 #include "xbt/dict.h"
9
10 static void void_die_impossible_paction(surf_action_t action)
11 {
12   DIE_IMPOSSIBLE;
13 }
14
15 static int int_die_impossible_paction(surf_action_t action)
16 {
17   DIE_IMPOSSIBLE;
18 }
19
20 /** @brief initialize common datastructures to all models */
21 surf_model_t surf_model_init(void)
22 {
23   s_surf_action_t action;
24   surf_model_t model = xbt_new0(s_surf_model_t, 1);
25
26   model->model_private = xbt_new0(s_surf_model_private_t, 1);
27
28   model->states.ready_action_set =
29     xbt_swag_new(xbt_swag_offset(action, state_hookup));
30   model->states.running_action_set =
31     xbt_swag_new(xbt_swag_offset(action, state_hookup));
32   model->states.failed_action_set =
33     xbt_swag_new(xbt_swag_offset(action, state_hookup));
34   model->states.done_action_set =
35     xbt_swag_new(xbt_swag_offset(action, state_hookup));
36   model->resource_set = xbt_dict_new();
37
38   model->action_free = int_die_impossible_paction;
39   model->action_cancel = void_die_impossible_paction;
40   model->action_recycle = void_die_impossible_paction;
41
42   return model;
43 }
44 /** @brief finalize common datastructures to all models */
45 void surf_model_exit(surf_model_t model)
46 {
47   xbt_swag_free(model->states.ready_action_set);
48   xbt_swag_free(model->states.running_action_set);
49   xbt_swag_free(model->states.failed_action_set);
50   xbt_swag_free(model->states.done_action_set);
51   xbt_dict_free(&model->resource_set);
52   free(model->model_private);
53   free(model);
54 }
55
56 void *surf_model_resource_by_name(surf_model_t model, const char *name)
57 {
58   return xbt_dict_get_or_null(model->resource_set, name);
59 }
60
61