summaryrefslogtreecommitdiff
path: root/2003/i/buzz/src/automate/grafcet.cc
blob: b2af52e48667d91df3f84af4f6b8e35c7dff0161 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// grafcet.cc
// buzz - Programme du robot Efrei Robotique I1-I2 2003
// Copyright (C) 2003 Nicolas Schodet
//
#include "grafcet.h"
#include "erreur/erreur.h"

Automate::Grafcet *parse_file (const char *filename);

namespace Automate
{

// Pointeur vers l'instance unique du grafcet.
Grafcet *Grafcet::m_instance = 0;

// Constructeur.
Grafcet::Grafcet ()
{
}

Grafcet::Grafcet (const char *filename)
{
    Grafcet *g = parse_file (filename);
    if (!g) throw ErreurFatale ("Impossible de lire le grafcet");
    m_grafcet = g->m_grafcet;
    delete g;
}

// Destructeur.
Grafcet::~Grafcet ()
{
    for (vector<GrafcetElem>::iterator i = m_grafcet.begin ();
	 i != m_grafcet.end (); ++i)
      {
	switch (i->type)
	  {
	  case etape:
	    delete i->elem.etape;
	    break;
	  case action:
	    delete i->elem.action;
	    break;
	  case receptivite:
	    delete i->elem.receptivite;
	    break;
	  case transition:
	    delete i->elem.transition;
	    break;
	  }
      }
}


} // namespace Automate