little fix
[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<string,Backend::Factory*>*
12 Backend::Factory::factories = NULL;
13 int
14 Backend::Factory::ref = 0;
15
16 Backend::Factory::Factory ( const std::string& name_ )
17 {
18 string name(name_);
19 strlwr ( &name[0] );
20 if ( !ref++ )
21 factories = new map<string,Factory*>;
22 (*factories)[name] = this;
23 }
24
25 Backend::Factory::~Factory ()
26 {
27 if ( !--ref )
28 {
29 delete factories;
30 factories = NULL;
31 }
32 }
33
34 /*static*/ Backend*
35 Backend::Factory::Create ( const string& name,
36 Project& project,
37 Configuration& configuration )
38 {
39 string sname ( name );
40 strlwr ( &sname[0] );
41 if ( !factories || !factories->size () )
42 throw InvalidOperationException ( __FILE__,
43 __LINE__,
44 "No registered factories" );
45 Backend::Factory* f = (*factories)[sname];
46 if ( !f )
47 {
48 throw UnknownBackendException ( sname );
49 return NULL;
50 }
51 return (*f) ( project, configuration );
52 }
53
54 Backend::Backend ( Project& project,
55 Configuration& configuration )
56 : ProjectNode ( project ),
57 configuration ( configuration )
58 {
59 }
60
61 Backend::~Backend()
62 {
63 }