[cfe-commits] r75168 - in /cfe/trunk: include/clang/Basic/DiagnosticGroups.td include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDeclCXX.cpp test/SemaCXX/constructor-initializer.cpp test/SemaCXX/warn-reorder-ctor-initialization.cpp
Daniel Dunbar
daniel at zuster.org
Tue Jul 21 13:16:04 PDT 2009
On Tue, Jul 21, 2009 at 10:08 AM, Douglas Gregor<dgregor at apple.com> wrote:
> On Jul 9, 2009, at 1:00 PM, Fariborz Jahanian wrote:
>> + int Last = AllBaseOrMembers.size();
>> + int curIndex = 0;
>> + CXXBaseOrMemberInitializer *PrevMember = 0;
>> + for (unsigned i = 0; i < NumMemInits; i++) {
>> + CXXBaseOrMemberInitializer *Member =
>> + static_cast<CXXBaseOrMemberInitializer*>(MemInits[i]);
>> + void *MemberInCtorList;
>> + if (Member->isBaseInitializer())
>> + MemberInCtorList = Member->getBaseClass();
>> + else
>> + MemberInCtorList = Member->getMember();
>> +
>> + int j;
>> + for (j = curIndex; j < Last; j++)
>> + if (MemberInCtorList == AllBaseOrMembers[j])
>> + break;
>
> It's too bad that this is O(N^2), but I can't think of a way to make
> it faster without having the ability to sort the initializer list by
> its initialization-position. Besides, the initializer list will
> generally be short.
Am I missing something, why not just create a DenseMap from
AllBaseOrMembers[j] -> j? (Assuming the contents of that array are
distinct).
(A SmallDenseMap ideally, if we happened to have that ADT)
- Daniel
More information about the cfe-commits
mailing list