source: sources/src/module_hierarchy.cc @ 57

Last change on this file since 57 was 52, checked in by meunier, 12 years ago

Code formatting in all source files.

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