replaced Backend Factory's vector with a map.
[reactos.git] / reactos / tools / rbuild / backend / backend.cpp
1
2 #include "../pch.h"
3
4 #include "../Rbuild.h"
5 #include "backend.h"
6
7 using std::string;
8 using std::vector;
9 using std::map;
10
11 map<const char*,Backend::Factory*>* Backend::Factory::factories = NULL;
12
13 Backend::Factory::Factory ( const std::string& name_ )
14 {
15 string name(name_);
16 strlwr ( &name[0] );
17 if ( !factories )
18 factories = new map<const char*,Factory*>;
19 (*factories)[name.c_str()] = this;
20 }
21
22 /*static*/ Backend*
23 Backend::Factory::Create ( const std::string& name, Project& project )
24 {
25 string sname ( name );
26 strlwr ( &sname[0] );
27 if ( !factories || !factories->size() )
28 throw Exception ( "internal tool error: no registered factories" );
29 Backend::Factory* f = (*factories)[sname.c_str()];
30 if ( !f )
31 {
32 throw UnknownBackendException ( sname );
33 return NULL;
34 }
35 return (*f) ( project );
36 }
37
38 Backend::Backend ( Project& project )
39 : ProjectNode ( project )
40 {
41 }