source: branches/with_autoconf/src/module_hierarchy.cc @ 11

Last change on this file since 11 was 8, checked in by nipo, 16 years ago

Checkin autotools magic

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