source: sources/src/module_hierarchy.cc @ 17

Last change on this file since 17 was 17, checked in by buchmann, 15 years ago

Fix :

  • add missing system header includes
File size: 3.6 KB
Line 
1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :                 module_hierarchy.cc               |
6|                                                             |
7| Author  :                 Buchmann Richard                  |
8|                                                             |
9| Date    :                   15_12_2005                      |
10|                                                             |
11\------------------------------------------------------------*/
12
13/*
14 * This file is part of the Disydent Project
15 * Copyright (C) Laboratoire LIP6 - Département ASIM
16 * Universite Pierre et Marie Curie
17 *
18 * Home page          : http://www-asim.lip6.fr/disydent
19 * E-mail             : mailto:richard.buchmann@lip6.fr
20 *
21 * This library is free software; you  can redistribute it and/or modify it
22 * under the terms  of the GNU Library General Public  License as published
23 * by the Free Software Foundation; either version 2 of the License, or (at
24 * your option) any later version.
25 *
26 * Disydent is distributed  in the hope  that it  will be
27 * useful, but WITHOUT  ANY WARRANTY; without even the  implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
29 * Public License for more details.
30 *
31 * You should have received a copy  of the GNU General Public License along
32 * with the GNU C Library; see the  file COPYING. If not, write to the Free
33 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
34 */
35
36#include "module_hierarchy.h"
37#include "sc_module.h"
38#include "assert.h"
39#include <map>
40#include <cstdlib>
41#include <cstring>
42
43using namespace std;
44
45namespace sc_core {
46
47typedef vector<sc_object*> sc_object_list_t;
48typedef map<const sc_object*,sc_object_list_t> sc_object2sc_object_list_t;
49typedef map<const sc_object*,sc_object *>      sc_object2sc_object_t;
50
51sc_object_list_t            top_level_objects;
52sc_object2sc_object_list_t  object2childs;
53sc_object2sc_object_t       object2parent;
54
55void
56set_parent (sc_module &mod, sc_module *parent)
57{
58  object2parent[&mod] = parent; 
59  sc_object_list_t &obj_list = (parent == NULL)?top_level_objects:object2childs[parent];
60  obj_list.push_back (&mod);
61}
62
63void
64add_child (sc_object &obj)
65{
66  sc_object_list_t *obj_list;
67  if (modules_stack.empty ())
68  {
69    obj_list = &top_level_objects;
70  } else {
71    const sc_module *parent    = modules_stack.top ();
72    if (parent == NULL)
73      return; //obj_list = &top_level_objects;
74    else {
75      ASSERT(parent != &obj);
76      const sc_object *pobj      = (const sc_module *) parent;
77      obj_list = &(object2childs[pobj]);
78    }
79  }
80  obj_list->push_back (&obj);
81}
82
83const std::vector<sc_object*>& 
84sc_get_top_level_objects()
85{
86  return top_level_objects;
87}
88
89const sc_object*
90sc_find_object (const char* name)
91{
92  sc_object2sc_object_list_t::iterator i = object2childs.begin ();
93  while (i != object2childs.end ())
94  {
95    const sc_object *obj = i->first;
96    const char      *n   = obj->name ();
97    if (strcmp (name, n) == 0)
98      return obj;
99    ++i;
100  }
101  return NULL;
102}
103 
104const std::vector<sc_object*>& 
105get_child_objects (const sc_object &obj)
106{
107  sc_object_list_t &l = object2childs[&obj];
108  /*
109   * If the object is not in the objects list,
110   * get_child_objects returns an empty list.
111   */
112  return l;   
113}
114
115sc_object*
116get_parent_object (const sc_object &obj)
117{
118  return object2parent[&obj];
119}
120
121} // end of namespace sc_core
122
123
Note: See TracBrowser for help on using the repository browser.