source: sources/src/module_hierarchy.cc @ 3

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

Initial import from CVS repository

File size: 3.5 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
41using namespace std;
42
43namespace sc_core {
44
45typedef vector<sc_object*> sc_object_list_t;
46typedef map<const sc_object*,sc_object_list_t> sc_object2sc_object_list_t;
47typedef map<const sc_object*,sc_object *>      sc_object2sc_object_t;
48
49sc_object_list_t            top_level_objects;
50sc_object2sc_object_list_t  object2childs;
51sc_object2sc_object_t       object2parent;
52
53void
54set_parent (sc_module &mod, sc_module *parent)
55{
56  object2parent[&mod] = parent; 
57  sc_object_list_t &obj_list = (parent == NULL)?top_level_objects:object2childs[parent];
58  obj_list.push_back (&mod);
59}
60
61void
62add_child (sc_object &obj)
63{
64  sc_object_list_t *obj_list;
65  if (modules_stack.empty ())
66  {
67    obj_list = &top_level_objects;
68  } else {
69    const sc_module *parent    = modules_stack.top ();
70    if (parent == NULL)
71      return; //obj_list = &top_level_objects;
72    else {
73      ASSERT(parent != &obj);
74      const sc_object *pobj      = (const sc_module *) parent;
75      obj_list = &(object2childs[pobj]);
76    }
77  }
78  obj_list->push_back (&obj);
79}
80
81const std::vector<sc_object*>& 
82sc_get_top_level_objects()
83{
84  return top_level_objects;
85}
86
87const sc_object*
88sc_find_object (const char* name)
89{
90  sc_object2sc_object_list_t::iterator i = object2childs.begin ();
91  while (i != object2childs.end ())
92  {
93    const sc_object *obj = i->first;
94    const char      *n   = obj->name ();
95    if (strcmp (name, n) == 0)
96      return obj;
97    ++i;
98  }
99  return NULL;
100}
101 
102const std::vector<sc_object*>& 
103get_child_objects (const sc_object &obj)
104{
105  sc_object_list_t &l = object2childs[&obj];
106  /*
107   * If the object is not in the objects list,
108   * get_child_objects returns an empty list.
109   */
110  return l;   
111}
112
113sc_object*
114get_parent_object (const sc_object &obj)
115{
116  return object2parent[&obj];
117}
118
119} // end of namespace sc_core
120
121
Note: See TracBrowser for help on using the repository browser.