ECode AttributedString::AttributedIterator::GetAllAttributeKeys( /* [out] */ ISet** allAttributedKeys) { VALIDATE_NOT_NULL(allAttributedKeys); AutoPtr<ISet> result; CHashSet::New((ISet**)&result); ICollection* ci = ICollection::Probe(result); *allAttributedKeys = result; REFCOUNT_ADD(*allAttributedKeys); AttributeRangeMapIterator it = mAttrString->mAttributeMap.Begin(); if (mBegin == 0 && mEnd == (Int32)mAttrString->mText.GetLength() && mAttributesAllowed.IsEmpty()) { for(; it != mAttrString->mAttributeMap.End(); ++it) { ci->Add(it->mFirst); } return NOERROR; } for(; it != mAttrString->mAttributeMap.End(); ++it) { if (mAttributesAllowed.Find(it->mFirst) != mAttributesAllowed.End()) { AutoPtr<List<AutoPtr<Range> > > ranges = it->mSecond; if (InRange(ranges)) { ci->Add(it->mFirst); } } } return NOERROR; }
ECode AttributedString::constructor( /* [in] */ IAttributedCharacterIterator* iterator, /* [in] */ Int32 start, /* [in] */ Int32 end, /* [in] */ ArrayOf<IAttributedCharacterIteratorAttribute*>* attributes) { AutoPtr<ISet> container; CHashSet::New((ISet**)&container); if (attributes != NULL) { Boolean modified; ICollection* collection = ICollection::Probe(container); for (Int32 i = 0; i < attributes->GetLength(); ++i) { collection->Add((*attributes)[i], &modified); } } return constructor(iterator, start, end, container); }