1
/***************************************************************************
2
Copyright 2006 David Nolden <david.nolden.kdevelop@art-master.de>
3
***************************************************************************/
5
/***************************************************************************
7
* This program is free software; you can redistribute it and/or modify *
8
* it under the terms of the GNU General Public License as published by *
9
* the Free Software Foundation; either version 2 of the License, or *
10
* (at your option) any later version. *
12
***************************************************************************/
15
#include <QDataStream>
17
#include <language/editor/hashedstring.h>
20
using namespace KDevelop;
22
void MacroSet::read( QDataStream& stream ) {
23
Q_ASSERT(0); ///@todo reimplement
25
/* m_idHashValid = false;
26
m_valueHashValid = false;
31
for( int a = 0; a < cnt; a++ ) {
33
m_usedMacros.insert( m );
37
void MacroSet::write( QDataStream& stream ) const {
38
Q_ASSERT(0); ///@todo reimplement
40
/* stream << int( m_usedMacros.size() );
41
for( Macros::const_iterator it = m_usedMacros.begin(); it != m_usedMacros.end(); ++it ) {
42
(*it).write( stream );
46
void MacroSet::addMacro( const rpp::pp_macro& macro ) {
47
std::pair<Macros::iterator, bool> r = m_usedMacros.insert( macro );
49
//Make sure the macro added later will be used
50
m_usedMacros.erase( r.first );
51
m_usedMacros.insert( macro );
54
m_idHashValid = m_valueHashValid = false;
57
void MacroSet::merge( const MacroSet& macros ) {
58
Macros m = macros.m_usedMacros; //Swap is needed so the merged macros take precedence
59
m.insert( m_usedMacros.begin(), m_usedMacros.end() );
61
m_idHashValid = m_valueHashValid = false;
65
size_t MacroSet::idHash() const {
66
if( !m_idHashValid ) computeHash();
70
size_t MacroSet::valueHash() const {
71
if( !m_valueHashValid ) computeHash();
75
int MacroSet::size() const {
76
return m_usedMacros.size();
79
void MacroSet::computeHash() const {
83
for( Macros::const_iterator it = m_usedMacros.begin(); it != m_usedMacros.end(); ++it ) {
85
m_idHash += (*it).idHash();
86
m_valueHash += (*it).valueHash();
90
bool MacroSet::hasMacro( const QString& name ) const {
91
Macros::const_iterator it = m_usedMacros.find( rpp::pp_macro( name ) );
92
if( it != m_usedMacros.end() ) {
99
bool MacroSet::hasMacro( const HashedString& name ) const {
100
Macros::const_iterator it = m_usedMacros.find( rpp::pp_macro( name.str() ) );
101
if( it != m_usedMacros.end() ) {
108
rpp::pp_macro MacroSet::macro( const HashedString& name ) const {
109
Macros::const_iterator it = m_usedMacros.find( rpp::pp_macro( name ) );
111
if( it != m_usedMacros.end() ) {
114
return rpp::pp_macro();