source: branches/with_autoconf/src/mouchard_scheduling.cc

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

Checkin autotools magic

File size: 4.0 KB
Line 
1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :                  mouchard_scheduling.cc           |
6|                                                             |
7| Author  :                 Buchmann Richard                  |
8|                                                             |
9| Date    :                   20_12_2006                      |
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 <set>
37#include <iostream>
38#include <fstream>
39#include "assert.h"
40#include "process_dependency.h"
41#include "methodprocess_dependency.h"
42#include "mouchard_scheduling.h"
43#include "simplify_string.h"
44#include "sc_fwd.h"
45#include "sc_module.h"
46#include "sc_ver.h"
47#ifdef HAVE_CONFIG_H
48#include "config.h"
49#endif
50
51using namespace std;
52
53namespace sc_core {
54
55typedef set<SignalDependency> signalDependencySet;
56typedef set<const method_process_t*> processSet;
57
58static
59void
60getSource (signalDependencySet        &ss,
61           const SignalDependencyGraph &sig_g)
62{
63  typedef set<const equi_t *> nonSource_t;
64  nonSource_t nonSource;
65  SignalDependencyGraph::iterator it;
66  for (it = sig_g.begin(); it != sig_g.end(); ++it)
67  {
68    const SignalDependency &sigDep = *it;
69    const equi_t           *dest   = sigDep.destination;
70    nonSource.insert(dest);
71  }
72  for (it = sig_g.begin(); it != sig_g.end(); ++it)
73  {
74    const SignalDependency &sigDep = *it;
75    const equi_t           *src    = sigDep.source;
76    if (nonSource.find(src) == nonSource.end())
77      ss.insert(sigDep);
78  }
79}
80
81static
82void
83removeSignals (SignalDependencyGraph &sig_g,
84               signalDependencySet   &ss)
85{
86  SignalDependencyGraph::iterator it = sig_g.begin();
87  while (it != sig_g.end())
88  {
89    const SignalDependency &sigDep = *it;
90    if (ss.find(sigDep) != ss.end())
91    {
92      SignalDependencyGraph::iterator jt = it++;
93      sig_g.erase (jt);
94    } else
95      ++it;
96  }
97}
98
99ProcessDependencyList* 
100MakeMouchardScheduling (const SignalDependencyGraph  & _sig_g)
101{
102  if (dump_stage)
103    cerr << "Making process dependency list...\n";
104        ProcessDependencyList *mod_l = new ProcessDependencyList ();
105        SignalDependencyGraph sig_g = _sig_g;
106        while (!sig_g.empty ())
107        {
108                signalDependencySet ss;
109    getSource (ss, sig_g);
110    removeSignals (sig_g, ss);
111    processSet ps;
112    signalDependencySet::iterator sit;
113    for (sit = ss.begin(); sit != ss.end(); ++sit)
114    {
115                  const SignalDependency &sigdep  = *sit;
116                  const method_process_t *process = sigdep.method;
117      ps.insert(process);
118    }
119    processSet::iterator pit;
120    for (pit = ps.begin(); pit != ps.end(); ++pit)
121    {
122      const method_process_t *process = *pit;
123            mod_l->push_back(process);
124#if 1
125                cerr << "Process found : " << *process << "\n";
126#endif
127    }
128  }
129   
130        return mod_l;
131}
132
133} // end of sc_core namespace
134
Note: See TracBrowser for help on using the repository browser.