source: latest/src/mouchard_scheduling.cc @ 1

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

Initial import from CVS repository

File size: 3.9 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
48using namespace std;
49
50namespace sc_core {
51
52typedef set<SignalDependency> signalDependencySet;
53typedef set<const method_process_t*> processSet;
54
55static
56void
57getSource (signalDependencySet        &ss,
58           const SignalDependencyGraph &sig_g)
59{
60  typedef set<const equi_t *> nonSource_t;
61  nonSource_t nonSource;
62  SignalDependencyGraph::iterator it;
63  for (it = sig_g.begin(); it != sig_g.end(); ++it)
64  {
65    const SignalDependency &sigDep = *it;
66    const equi_t           *dest   = sigDep.destination;
67    nonSource.insert(dest);
68  }
69  for (it = sig_g.begin(); it != sig_g.end(); ++it)
70  {
71    const SignalDependency &sigDep = *it;
72    const equi_t           *src    = sigDep.source;
73    if (nonSource.find(src) == nonSource.end())
74      ss.insert(sigDep);
75  }
76}
77
78static
79void
80removeSignals (SignalDependencyGraph &sig_g,
81               signalDependencySet   &ss)
82{
83  SignalDependencyGraph::iterator it = sig_g.begin();
84  while (it != sig_g.end())
85  {
86    const SignalDependency &sigDep = *it;
87    if (ss.find(sigDep) != ss.end())
88    {
89      SignalDependencyGraph::iterator jt = it++;
90      sig_g.erase (jt);
91    } else
92      ++it;
93  }
94}
95
96ProcessDependencyList* 
97MakeMouchardScheduling (const SignalDependencyGraph  & _sig_g)
98{
99  if (dump_stage)
100    cerr << "Making process dependency list...\n";
101        ProcessDependencyList *mod_l = new ProcessDependencyList ();
102        SignalDependencyGraph sig_g = _sig_g;
103        while (!sig_g.empty ())
104        {
105                signalDependencySet ss;
106    getSource (ss, sig_g);
107    removeSignals (sig_g, ss);
108    processSet ps;
109    signalDependencySet::iterator sit;
110    for (sit = ss.begin(); sit != ss.end(); ++sit)
111    {
112                  const SignalDependency &sigdep  = *sit;
113                  const method_process_t *process = sigdep.method;
114      ps.insert(process);
115    }
116    processSet::iterator pit;
117    for (pit = ps.begin(); pit != ps.end(); ++pit)
118    {
119      const method_process_t *process = *pit;
120            mod_l->push_back(process);
121#if 1
122                cerr << "Process found : " << *process << "\n";
123#endif
124    }
125  }
126   
127        return mod_l;
128}
129
130} // end of sc_core namespace
131
Note: See TracBrowser for help on using the repository browser.