source: sources/src/methodprocess_dependency.cc @ 27

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

SystemCASS now uses autoconf/automake to build the API. Regression tests still
use the old Makefiles.
(thanks to Nicolas Pouillon)

The library directory no longer is "lib-arch-system". The directory now is "lib-linux". Everyone needs to pay attention about SYSTEMCASS environment variable.

Changes:

  • system header includes
  • Add includes to config.h (generated by autoconf/automake)
  • test:
    • linux preprocessor macro instead of _WIN32
    • CONFIG_DEBUG instead of DEBUG

Removes:

  • Makefile
  • guess_endianness.cc
  • guess_os.sh
  • assert.h (we now use standard assert.h)
  • Options.def
File size: 4.2 KB
Line 
1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :           methodprocess_dependency.cc             |
6|                                                             |
7| Author  :                 Buchmann Richard                  |
8|                                                             |
9| Date    :                   22_11_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 "methodprocess_dependency.h"
38#include "simplify_string.h"
39#include "sc_module.h"
40#include <iostream>
41#include <fstream>
42#ifdef HAVE_CONFIG_H
43#include "config.h"
44#endif
45
46using namespace std;
47namespace sc_core {
48
49string
50get_name (const method_process_t *method)
51{
52  assert(method != NULL);
53  const sc_module *module = method->module;
54  assert(module != NULL);
55  const char *module_name = module->name ();
56  const char *function_name = method->name;
57 
58  string name = module_name;
59  name += "_";
60  name += function_name;
61  return name;
62}
63
64static
65bool
66dot_write (ofstream &o,
67           const SignalDependencyGraph &sig)
68{
69  // Preparing data
70  typedef map<const equi_t *, const method_process_t *> table_t;
71  table_t table;
72 
73  // For each arrow, add destination node into table
74        SignalDependencyGraph::const_iterator sig_it;
75        for (sig_it = sig.begin (); sig_it != sig.end (); ++sig_it)
76  {
77    const SignalDependency &sd     = *sig_it;
78    const equi_t           *equi   = sd.destination;
79          const method_process_t *method = sd.method;
80    table[equi] = method;
81  }
82
83  // Printing into dot file
84        string s;
85  SignalDependencyGraph::const_iterator it;
86  for (it = sig.begin (); it != sig.end (); ++it)
87  {
88    const SignalDependency &sd = *it;
89    const equi_t           *source_equi     = sd.source;
90    assert(source_equi != NULL);
91          const method_process_t *source_method   = table[source_equi];
92    if (source_method == NULL)
93      continue;
94    string                  source_method_name = get_name (source_method);
95    string                  source_equi_name = get_name (*source_equi);
96          const method_process_t *destination_method = sd.method;
97    string                  destination_method_name = get_name (destination_method);
98                o << "edge [label="
99      << simplify_name(source_equi_name.c_str(),s)
100      << "];\n";
101                o << simplify_name(source_method_name.c_str(),s);
102                o       << " -> ";
103                o << simplify_name(destination_method_name.c_str(),s);
104          o << ";\n";
105  }
106}
107
108bool 
109MethodProcessDependencyGraph2dot (const char *name,
110                                  const SignalDependencyGraph& sig)
111{
112        if (!name)
113                return false;
114        string filename;
115        filename =  name;
116        filename += ".dot";
117        ofstream o;
118  o.open (filename.c_str(),ios::out | ios::trunc);
119        if (o.is_open () == false)
120                return false;
121        o << "strict digraph " << name << " {\n";
122        dot_write (o,sig);
123  // Closing dot file
124        o << "}\n";
125        o.close ();
126  if (dump_stage)
127    cerr << "MethodProcess dependency graph written into '" 
128         << filename << "'.\n";
129        return true;
130}
131
132} // end of sc_core namespace
133
Note: See TracBrowser for help on using the repository browser.