2 * Copyright (C) 2005 Casper S. Hornstrup
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 StubbedComponent::StubbedComponent ( const Module
* module_
,
27 const XMLElement
& stubbedComponentNode
)
29 node(stubbedComponentNode
)
31 const XMLAttribute
* att
= node
.GetAttribute ( "name", true );
36 StubbedComponent::~StubbedComponent ()
38 for ( size_t i
= 0; i
< symbols
.size(); i
++ )
43 StubbedComponent::ProcessXML ()
46 for ( i
= 0; i
< node
.subElements
.size (); i
++ )
47 ProcessXMLSubElement ( *node
.subElements
[i
] );
48 for ( i
= 0; i
< symbols
.size (); i
++ )
49 symbols
[i
]->ProcessXML ();
53 StubbedComponent::ProcessXMLSubElement ( const XMLElement
& e
)
55 bool subs_invalid
= false;
56 if ( e
.name
== "symbol" )
58 symbols
.push_back ( new StubbedSymbol ( e
) );
61 if ( subs_invalid
&& e
.subElements
.size () > 0 )
62 throw InvalidBuildFileException (
64 "<%s> cannot have sub-elements",
66 for ( size_t i
= 0; i
< e
.subElements
.size (); i
++ )
67 ProcessXMLSubElement ( *e
.subElements
[i
] );
72 StubbedSymbol::StubbedSymbol ( const XMLElement
& stubbedSymbolNode
)
73 : node(stubbedSymbolNode
)
77 StubbedSymbol::~StubbedSymbol ()
82 StubbedSymbol::ProcessXML ()
84 if ( node
.value
.size () == 0 )
86 throw InvalidBuildFileException (
88 "<symbol> is empty." );
92 strippedName
= StripSymbol ( symbol
);
94 const XMLAttribute
* att
= node
.GetAttribute ( "newname", false );
98 newname
= strippedName
;
102 StubbedSymbol::StripSymbol ( string symbol
)
105 while ( start
< symbol
.length () && symbol
[start
] == '@')
107 size_t end
= symbol
.length () - 1;
108 while ( end
> 0 && isdigit ( symbol
[end
] ) )
110 if ( end
> 0 && symbol
[end
] == '@' )
113 return symbol
.substr ( start
, end
- start
+ 1 );