copyleft: gplv3 added and set repo to public
[calu.git] / 3c_disasm / CInstrFactory.hpp
1 /*   `Deep Thought', a softcore CPU implemented on a FPGA
2
3     Copyright (C) 2010 Markus Hofstaetter <markus.manrow@gmx.at>
4     Copyright (C) 2010 Martin Perner <e0725782@student.tuwien.ac.at>
5     Copyright (C) 2010 Stefan Rebernig <stefan.rebernig@gmail.com>
6     Copyright (C) 2010 Manfred Schwarz <e0725898@student.tuwien.ac.at>
7     Copyright (C) 2010 Bernhard Urban <lewurm@gmail.com>
8
9     This program is free software: you can redistribute it and/or modify
10     it under the terms of the GNU General Public License as published by
11     the Free Software Foundation, either version 3 of the License, or
12     (at your option) any later version.
13
14     This program is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17     GNU General Public License for more details.
18
19     You should have received a copy of the GNU General Public License
20     along with this program.  If not, see <http://www.gnu.org/licenses/>. */
21
22 #ifndef __CINSTRUCTIONFACTORY_H__
23 #define __CINSTRUCTIONFACTORY_H__
24
25 #include "Iinstr.hpp"
26
27 #include <string.h>
28
29 #include <iostream>
30 #include <sstream>
31 #include <map>
32 #include <vector>
33 #include <algorithm>
34
35 #include <dlfcn.h>
36 #include <errno.h>
37
38 #include <dirent.h>
39
40 /**
41  * Name:    CInstructionFactory
42  * Purpose: Factory for creating commands from shared libraries
43  */
44 class CInstrFactory {
45 private:
46         std::map<void*, Iinstr*> m_libStore;
47         std::vector<std::string> m_files;
48
49         Iinstr* loadFromLib(std::string lib);
50 public:
51         Iinstr* getNextInstr();
52         size_t getNumFiles();
53         size_t searchLibsInDir(std::string dir);
54         void loadLibsIntoMap(map<short, Iinstr*>& instr, string dir);
55         CInstrFactory() : m_libStore(), m_files() {};
56         ~CInstrFactory();
57 };
58
59 #endif