2010CaoTme2: Library.cpp

File Library.cpp, 2.2 KB (added by jpc, 15 years ago)

Mini cell (Lofig) library C++ module

Line 
1
2#include  "Lofig.h"
3#include  "Locon.h"
4#include  "Library.h"
5
6
7Library* Library::_singleton = NULL;
8
9
10void  Library::destroy ()
11{
12  if ( _singleton ) delete _singleton;
13  _singleton = NULL;
14}
15
16
17Lofig* Library::getModel ( unsigned int modelType )
18{
19  if ( _singleton == NULL ) _singleton = new Library ();
20  return _singleton->_getModel(modelType);
21}
22
23
24void  Library::_createAnd2 ()
25{
26  _table[And2] = new Lofig ( "and2" );
27
28  _table[And2]->addSignal ( "i0"  , Locon::External );
29  _table[And2]->addSignal ( "i1"  , Locon::External );
30  _table[And2]->addSignal ( "q"   , Locon::External );
31
32  _table[And2]->addConnector ( "i0" , Locon::In , _table[And2]->findSignal("i0" ) );
33  _table[And2]->addConnector ( "i1" , Locon::In , _table[And2]->findSignal("i1" ) );
34  _table[And2]->addConnector ( "q"  , Locon::Out, _table[And2]->findSignal("q"  ) );
35
36  _table[And2]->setMode ( Lofig::Abstract );
37}
38
39
40void  Library::_createOr2 ()
41{
42  _table[Or2] = new Lofig ( "or2" );
43
44  _table[Or2]->addSignal ( "i0"  , Locon::External );
45  _table[Or2]->addSignal ( "i1"  , Locon::External );
46  _table[Or2]->addSignal ( "q"   , Locon::External );
47
48  _table[Or2]->addConnector ( "i0" , Locon::In , _table[Or2]->findSignal("i0" ) );
49  _table[Or2]->addConnector ( "i1" , Locon::In , _table[Or2]->findSignal("i1" ) );
50  _table[Or2]->addConnector ( "q"  , Locon::Out, _table[Or2]->findSignal("q"  ) );
51
52  _table[Or2]->setMode ( Lofig::Abstract );
53}
54
55
56void  Library::_createXor2 ()
57{
58  _table[Xor2] = new Lofig ( "xor2" );
59
60  _table[Xor2]->addSignal ( "i0"  , Locon::External );
61  _table[Xor2]->addSignal ( "i1"  , Locon::External );
62  _table[Xor2]->addSignal ( "q"   , Locon::External );
63
64  _table[Xor2]->addConnector ( "i0" , Locon::In , _table[Xor2]->findSignal("i0" ) );
65  _table[Xor2]->addConnector ( "i1" , Locon::In , _table[Xor2]->findSignal("i1" ) );
66  _table[Xor2]->addConnector ( "q"  , Locon::Out, _table[Xor2]->findSignal("q"  ) );
67
68  _table[Xor2]->setMode ( Lofig::Abstract );
69}
70
71
72Library::Library ()
73{
74  _createAnd2 ();
75  _createOr2  ();
76  _createXor2 ();
77}
78
79
80Lofig* Library::_getModel ( unsigned int modelType )
81{
82  if ( modelType < ModelTypeSize ) return _table[modelType];
83 
84  std::cerr << "[ERROR] Library::getModel(): No model of type id:" << modelType << "." << std::endl;
85  return NULL;
86}