| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | /**************************************************************************
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-06-17 00:01:27 +10:00
										 |  |  | ** Contact: Nokia Corporation (qt-info@nokia.com) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Commercial Usage | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Licensees holding valid Qt Commercial licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the Qt Commercial License Agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and Nokia. | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** GNU Lesser General Public License Usage | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Alternatively, this file may be used under the terms of the GNU Lesser | 
					
						
							|  |  |  | ** General Public License version 2.1 as published by the Free Software | 
					
						
							|  |  |  | ** Foundation and appearing in the file LICENSE.LGPL included in the | 
					
						
							|  |  |  | ** packaging of this file.  Please review the following information to | 
					
						
							|  |  |  | ** ensure the GNU Lesser General Public License version 2.1 requirements | 
					
						
							|  |  |  | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** If you are unsure which license is appropriate for your use, please | 
					
						
							| 
									
										
										
										
											2009-08-14 09:30:56 +02:00
										 |  |  | ** contact the sales department at http://qt.nokia.com/contact.
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | **************************************************************************/ | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | // Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					
						
							|  |  |  | // of this software and associated documentation files (the "Software"), to deal
 | 
					
						
							|  |  |  | // in the Software without restriction, including without limitation the rights
 | 
					
						
							|  |  |  | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					
						
							|  |  |  | // copies of the Software, and to permit persons to whom the Software is
 | 
					
						
							|  |  |  | // furnished to do so, subject to the following conditions:
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // The above copyright notice and this permission notice shall be included in
 | 
					
						
							|  |  |  | // all copies or substantial portions of the Software.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
					
						
							|  |  |  | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
					
						
							|  |  |  | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
					
						
							|  |  |  | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
					
						
							|  |  |  | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
					
						
							|  |  |  | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
					
						
							|  |  |  | // THE SOFTWARE.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "Names.h"
 | 
					
						
							|  |  |  | #include "NameVisitor.h"
 | 
					
						
							|  |  |  | #include "Literals.h"
 | 
					
						
							|  |  |  | #include <cstring>
 | 
					
						
							| 
									
										
										
										
											2009-12-01 14:38:42 +01:00
										 |  |  | #include <cassert>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <algorithm>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-20 11:21:25 +02:00
										 |  |  | using namespace CPlusPlus; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | QualifiedNameId::~QualifiedNameId() | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | { } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | void QualifiedNameId::accept0(NameVisitor *visitor) const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { visitor->visit(this); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | const Identifier *QualifiedNameId::identifier() const | 
					
						
							| 
									
										
										
										
											2009-05-28 11:49:59 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  |     if (const Name *u = unqualifiedNameId()) | 
					
						
							| 
									
										
										
										
											2009-05-28 11:49:59 +02:00
										 |  |  |         return u->identifier(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | unsigned QualifiedNameId::nameCount() const | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | { return _names.size(); } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | const Name *QualifiedNameId::nameAt(unsigned index) const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { return _names[index]; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool QualifiedNameId::isGlobal() const | 
					
						
							|  |  |  | { return _isGlobal; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | const Name *QualifiedNameId::unqualifiedNameId() const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  |     if (_names.empty()) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         return 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  |     return _names.back(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool QualifiedNameId::isEqualTo(const Name *other) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const QualifiedNameId *q = other->asQualifiedNameId(); | 
					
						
							|  |  |  |     if (! q) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     else if (isGlobal() != q->isGlobal()) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     else { | 
					
						
							|  |  |  |         const unsigned count = nameCount(); | 
					
						
							|  |  |  |         if (count != q->nameCount()) | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         for (unsigned i = 0; i < count; ++i) { | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  |             const Name *l = nameAt(i); | 
					
						
							|  |  |  |             const Name *r = q->nameAt(i); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |             if (! l->isEqualTo(r)) | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | NameId::NameId(const Identifier *identifier) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     : _identifier(identifier) | 
					
						
							|  |  |  | { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NameId::~NameId() | 
					
						
							|  |  |  | { } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | void NameId::accept0(NameVisitor *visitor) const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { visitor->visit(this); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | const Identifier *NameId::identifier() const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { return _identifier; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool NameId::isEqualTo(const Name *other) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const NameId *nameId = other->asNameId(); | 
					
						
							|  |  |  |     if (! nameId) | 
					
						
							|  |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  |     const Identifier *l = identifier(); | 
					
						
							|  |  |  |     const Identifier *r = nameId->identifier(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     return l->isEqualTo(r); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | DestructorNameId::DestructorNameId(const Identifier *identifier) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     : _identifier(identifier) | 
					
						
							|  |  |  | { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DestructorNameId::~DestructorNameId() | 
					
						
							|  |  |  | { } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | void DestructorNameId::accept0(NameVisitor *visitor) const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { visitor->visit(this); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | const Identifier *DestructorNameId::identifier() const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { return _identifier; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool DestructorNameId::isEqualTo(const Name *other) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const DestructorNameId *d = other->asDestructorNameId(); | 
					
						
							|  |  |  |     if (! d) | 
					
						
							|  |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  |     const Identifier *l = identifier(); | 
					
						
							|  |  |  |     const Identifier *r = d->identifier(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     return l->isEqualTo(r); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TemplateNameId::~TemplateNameId() | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | { } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | void TemplateNameId::accept0(NameVisitor *visitor) const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { visitor->visit(this); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | const Identifier *TemplateNameId::identifier() const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { return _identifier; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unsigned TemplateNameId::templateArgumentCount() const | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | { return _templateArguments.size(); } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | const FullySpecifiedType &TemplateNameId::templateArgumentAt(unsigned index) const | 
					
						
							|  |  |  | { return _templateArguments[index]; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool TemplateNameId::isEqualTo(const Name *other) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const TemplateNameId *t = other->asTemplateNameId(); | 
					
						
							|  |  |  |     if (! t) | 
					
						
							|  |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  |     const Identifier *l = identifier(); | 
					
						
							|  |  |  |     const Identifier *r = t->identifier(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     if (! l->isEqualTo(r)) | 
					
						
							|  |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  |     if (templateArgumentCount() != t->templateArgumentCount()) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  |     for (unsigned i = 0; i < templateArgumentCount(); ++i) { | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         const FullySpecifiedType &l = _templateArguments[i]; | 
					
						
							|  |  |  |         const FullySpecifiedType &r = t->_templateArguments[i]; | 
					
						
							|  |  |  |         if (! l.isEqualTo(r)) | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OperatorNameId::OperatorNameId(int kind) | 
					
						
							|  |  |  |     : _kind(kind) | 
					
						
							|  |  |  | { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OperatorNameId::~OperatorNameId() | 
					
						
							|  |  |  | { } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | void OperatorNameId::accept0(NameVisitor *visitor) const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { visitor->visit(this); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int OperatorNameId::kind() const | 
					
						
							|  |  |  | { return _kind; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | const Identifier *OperatorNameId::identifier() const | 
					
						
							| 
									
										
										
										
											2009-05-28 11:49:59 +02:00
										 |  |  | { return 0; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | bool OperatorNameId::isEqualTo(const Name *other) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const OperatorNameId *o = other->asOperatorNameId(); | 
					
						
							|  |  |  |     if (! o) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     return _kind == o->kind(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-17 14:37:45 +01:00
										 |  |  | ConversionNameId::ConversionNameId(const FullySpecifiedType &type) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     : _type(type) | 
					
						
							|  |  |  | { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ConversionNameId::~ConversionNameId() | 
					
						
							|  |  |  | { } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | void ConversionNameId::accept0(NameVisitor *visitor) const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { visitor->visit(this); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FullySpecifiedType ConversionNameId::type() const | 
					
						
							|  |  |  | { return _type; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | const Identifier *ConversionNameId::identifier() const | 
					
						
							| 
									
										
										
										
											2009-05-28 11:49:59 +02:00
										 |  |  | { return 0; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | bool ConversionNameId::isEqualTo(const Name *other) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const ConversionNameId *c = other->asConversionNameId(); | 
					
						
							|  |  |  |     if (! c) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     return _type.isEqualTo(c->type()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-31 16:03:48 +02:00
										 |  |  | SelectorNameId::~SelectorNameId() | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | { } | 
					
						
							| 
									
										
										
										
											2009-07-31 16:03:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | void SelectorNameId::accept0(NameVisitor *visitor) const | 
					
						
							| 
									
										
										
										
											2009-07-31 16:03:48 +02:00
										 |  |  | { visitor->visit(this); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 11:33:13 +01:00
										 |  |  | const Identifier *SelectorNameId::identifier() const | 
					
						
							| 
									
										
										
										
											2009-07-31 16:03:48 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  |     if (_names.empty()) | 
					
						
							| 
									
										
										
										
											2009-11-11 09:21:06 +01:00
										 |  |  |         return 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-31 16:03:48 +02:00
										 |  |  |     return nameAt(0)->identifier(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unsigned SelectorNameId::nameCount() const | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | { return _names.size(); } | 
					
						
							| 
									
										
										
										
											2009-07-31 16:03:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  | const Name *SelectorNameId::nameAt(unsigned index) const | 
					
						
							| 
									
										
										
										
											2009-07-31 16:03:48 +02:00
										 |  |  | { return _names[index]; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool SelectorNameId::hasArguments() const | 
					
						
							|  |  |  | { return _hasArguments; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool SelectorNameId::isEqualTo(const Name *other) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const SelectorNameId *q = other->asSelectorNameId(); | 
					
						
							|  |  |  |     if (! q) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     else if (hasArguments() != q->hasArguments()) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     else { | 
					
						
							|  |  |  |         const unsigned count = nameCount(); | 
					
						
							|  |  |  |         if (count != q->nameCount()) | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         for (unsigned i = 0; i < count; ++i) { | 
					
						
							| 
									
										
										
										
											2009-12-01 12:46:15 +01:00
										 |  |  |             const Name *l = nameAt(i); | 
					
						
							|  |  |  |             const Name *r = q->nameAt(i); | 
					
						
							| 
									
										
										
										
											2009-07-31 16:03:48 +02:00
										 |  |  |             if (! l->isEqualTo(r)) | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-20 11:21:25 +02:00
										 |  |  | 
 |